持有界面等待,所以时间不能太长。且数据一入库则可能被用到,所以临时表恐怕不行。就看看单纯入库最高效率是多少。
现5k数据至少3s,感觉上10倍数据是否会增加10倍。求最高效的入库方法,对oracle不熟悉,目前方法prestatement ,  addbatch 求比这个更好的方法,谢谢

解决方案 »

  1.   

    常规的想不到什么更好方法你可以全部写入到文件,或写入多个文件
    用Oracle SQL Loader加载入库
      

  2.   

    我最近也问了这个问题,目前都还没找到什么好的办法,如果你有什么好方法,请给我分享一下 email:[email protected]
      

  3.   

    一楼的方法刚开始没太明白
    后想一想经测试,勉强能达到要求,有效。
    就是addbatch也要控制提交记录数,每次1000
    这跟服务器性能相关,如果你服务器内存足够大,应该可以提交条数多些。
    这种需求本身标准方法也貌似没见到有什么解决方案。有不同需求的可以参考
    http://www.dba-oracle.com/t_optimize_insert_sql_performance.htm
    过两天结贴,再看看大虾们有没有好的处理方式的,预先一楼50分
      

  4.   

    看你是怎样的方式插入?如果是用toad在同库中一表插入另一表,上百万也没有问题.如果是通过程序来插入,一次五万就多了点,需要使用循环了.
      

  5.   

    不能这么说。
    你要插入的数据上是否有索引?是否有主键外键之类的约束?不能一概而论的。还有对磁盘空间的冗余是否心中有数?比方说,如果有索引,那么在批量插入的时候,你就需要将索引先删除再插入再建立索引。
    如果空间足够,请加入提示/*+append*/ 直接分配空闲数据块,而不是从头检索。这是理论,实际操作用这个提示做  /*+append ordered no_index(test,idx_no)*/
      

  6.   


    支持,支持一楼;这样的一次插入5W,我们公司属于数据导入,在夜晚的时候进行,白天严格不让做的,否则别人还怎么操作,况且生产库上面你要是一次导入5W条记录是需要经过部门经理批准的,而且要写详细实施过程文档的;普通的客户在web客户端页面是不会一次性导入5w条记录的,目前没有见过这种需求,我猜猜楼主导入5W条记录的应该后台管理平台的维护人员吧,这样的话可以选个业务量少的时间段实行导入的,尽量不要在白天业务高峰期进行。不知道楼主公司是怎么规定的!说下,分享吧!
      

  7.   

    要提高插入速度,请采用bulk insert,绝对不只5k/3s的速度。
      

  8.   

    to 7楼:
    持有界面等待,且等待之后会马上使用数据,肯定只能用insert导入,否则在我上面提到的连接中方法倒是还有2种比insert快将近2/3;
    to 9楼:
    主外键索引的删除,我认为不太合适,如果表中已有大量数据,这个重建时间也是问题;
    提到tip,虽然oracle有这个机制,但很少用,磁盘空间多少比例算合理?
    to 10楼:
    我说的5w属于最大情况,情况容忍,此就好说了哈^^
    to 11楼:
    我按照1楼之后,800ms左右基本可以搞定5k条,不知道你说的bulk insert又如何,没用过。