在java代码中,有一个ArrayList,其中都是insert语句
我每次从其中取1000条,executeBatch,当数据8万条时,插入时间为2分左右但是40万条时,插入时间超过了半小时,太慢了.请问有何比较好的办法?

解决方案 »

  1.   

    使用sql的hint/*+APPEND*/
    直接插入到表的最后,可以提高速度.
    insert /*+append*/ into test1 select * from test4 ; 
      

  2.   

    这些sql语句是通过java读文件数据生成的,可以吗?
      

  3.   


    具体的我也没有试过不知道可行不  create or replace procedure (sqlArray){}  --sqlArray  sql 数组   sql 数组 应该是oracle 用type 方法定义的也就是说 要把 java 的 arrayList 变成  oracle 的数组, 不知道能不能行,也不知道能不能提高速度等待高手解答!!!
      

  4.   

    1.并行插入参见楼上
    2.去掉表的log。这个作用更大
      

  5.   

    1. 用绑定变量
    2. insert /*+ append */ .... as select
    3. sqlloader
      

  6.   

    原来是insert into tbl1 (...) value(...)
    改为
    insert /* +APPEND */ into tbl1 select seq1.nextval,'xxx','xxx',33 from dual;这样hint是否有效?
      

  7.   

    因为insert语句里边都是值,每次都要解释语句。
    1。可以把数据都写到文件里,用SQL*loader加载,性能提高10倍。
    2。写一个insert语句,使用bind变量,打开游标。用游标,bind变量加载,性能提高9倍。
      

  8.   

    我试验也是1万条一次比较好。
    但最主要是bind方法,你是否能一次向存储过程提交1万行?
      

  9.   

    索引可以先删除,但primary key需保留以防重码。
      

  10.   

    建议sqlloader 处理,快多了
      

  11.   

    不要分批插入,一次插入40万条再commit就可以,前提是UNDO TABLESPACE要足够大.