我在JAVA端有一个LIST,当中有 350000 个对象
通过 FOR 循环执行 INSERT 添加到数据库中,
这个过程大约需要 4 分钟左右。我想让它再快些,比如 2 分钟 ,这如何进行优化啊?????

解决方案 »

  1.   

    insert /*+append*/ into不过这么多数据循环怎么都不会快的,你可以考虑sqlldr来批量插入
      

  2.   

    sqlldr
    http://yumianfeilong.com/2007/03/20/sqlldr%E8%AF%AD%E6%B3%95/
      

  3.   

    oracle sql loader
    你可以用java写一个date.txt文件,比如内容如下:1|wang|China
    2|zhang|USA然后写一个sql loader的配置文件test.ctl:load data 
    infile 'date.txt'
    replace into table myTable
    fields terminated by "|" 
    (Number, 
     UserName, 
    Country 
    )最后用sqlloader的命令插入数据库, cmd下就可以用
    sqlldr scott/tiger@orcl control=test.ctl log=test.log bad=test.bad direct=true
      

  4.   

    sql loader有三种模式,插入(insert),追加(append),替换(replace)
    替换会清空表中原来的数据,要注意
      

  5.   

    用存储过程处理,JAVA调过程,避免对象封装
      

  6.   

    for循环分段commit
    或者insert /* +append */ into 
      

  7.   

    用集合操作
    bulk colloct
    forall
    给你个例子
    declare    type dept_no is table of number;
        d_no dept_no;
        
    begin
        select deptno bulk collect into d_no from dept;
        forall i in 1..d_no.count
               insert into emp_2 
               select * from emp
               where deptno=d_no(i);
        for i in 1..d_no.count loop
        
        -- Count how many rows were inserted for each department; that is,
        -- how many employees are in each department.
        DBMS_OUTPUT.put_line(   'Dept '
                             || d_no(i)
                             || ': inserted '
                             || SQL%BULK_ROWCOUNT(i)
                             || ' records');
      END LOOP;  DBMS_OUTPUT.put_line('Total records inserted =' || SQL%ROWCOUNT);
    end;
      

  8.   

    1、不写日志(nologging);
    2、批量提交,而不是每插入一条提交一次。