oracle插入大量数据优化方式

1. 使用绑定变量优化插入速度

未优化前代码如下

create table t(x int);

create or replace procedure proc1
as 
begin
   for i in 1 .. 100000
   loop execute immediate
      'insert into t values('||i||')';
   commit;
   end loop;
end;

exec proc1;

执行时间如下:
在这里插入图片描述
使用绑定变量优化后代码如下:

create or replace procedure proc2
as 
begin
  for i in 1 .. 100000
    loop 
      execute immediate
        'insert into t values(:x)' using i;
      commit;
    end loop;
end;

执行时间如下:
在这里插入图片描述
可见使用绑定变量对性能有很大的提升。

2. 使用直接改写SQL

代码如下

create or replace procedure proc3
as 
begin
  for i in 1 .. 100000
    loop 
      insert into t values(i);
      commit;
    end loop;
end;

执行时间如下:
在这里插入图片描述
这里直接写sql比execute immediate效率高主要是因为execute immediate还需要将字符串转化为sql语句。

3. 减少commit次数

create or replace procedure proc4
as 
begin
  for i in 1 .. 100000
    loop 
      insert into t values(i);
      if  0=mod(i,10000) then
        commit;
      end if;
    end loop;
end;

执行时间:
在这里插入图片描述

4. 使用connectby 集合写

insert into t select rownum from dual connect by level<=100000

该方法会将数据写入数据缓存中,执行时间:
在这里插入图片描述

5. 直接路径写法

 create table t as select rownum x from dual connect by level<=1000000

该方式不经过缓存区,直接写入磁盘。执行时间:
在这里插入图片描述

6. 并行写

 create table t nologging parallel 4 as select rownum x from dual connect by level<=100000;

执行时间为:
在这里插入图片描述

你可能感兴趣的:(数据库)