程序需要以最短的时间往数据库表中插入大量的数据,
自己写了个小程序测试了下,一百万条记录插了半小时,感觉时间消耗的太长.
已经批量提交了
不能no log
不能删索引求教有何好方法

解决方案 »

  1.   

    最好用procedure去写.把你的程序帖出来看看.
      

  2.   

    硬件固定的了,不能升级的,主键约束等也是必须的
    缓冲和回滚各20G左右
    不能使用存储过程,就是C++程序调用oci往数据库写
      

  3.   

    for(int i=0;i<=1000000;i++)
    {
    m_hdbtxt.Format("insert into yu_ls values(%d,sysdate)",i);
    if(!DataBase.executeUpdate(LPTSTR(LPCTSTR(m_hdbtxt)),false))
    {
    AfxMessageBox("error!!!!!!!!!!!!!!!!");
    }
    }代码就这么简单...
      

  4.   

    批量提交的是另一段代码,没1000条commit一次
    但是效率提升不明显,只提升了30%,提升后是1700秒
    直接用这段代码得2200秒...
      

  5.   

    我看最好写一存储过程,在存储过程里面处理,第二个日期字段不插入,等插入完100万笔数据后,再一次性update第二个字段日期为当前日期时间
    oracle不是一个rownum吗?
    第一次用循环插入完1000笔数据后,
    第二次从1001开始插入,取出第一次插入最大ID=1000再加上行号1...1000,再插入1000笔,结果结有2000数据
    依次类推....
    第三次插入后,结果4000笔数据
    第四次插入后,结果8000笔数据
    .......
    最后判断是否插入够100万笔? 
    插入完后,一次性update日期字段
      

  6.   

    insert into yu_ls values(:i,sysdate) using i
    绑定变量后,硬解析少了,会快不少你可以用存储过程去做,存储过程就是用的绑定变量的