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;

执行时间如下:

79d6e71fd9f253fb05c0ffc6061eb1cf.png

使用绑定变量优化后代码如下:

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;

执行时间如下:

4080429602fc655becf13fbc86197ed6.png

可见使用绑定变量对性能有很大的提升。

2. 使用直接改写SQL

代码如下

create or replace procedure proc3

as

begin

for i in 1 .. 100000

loop

insert into t values(i);

commit;

end loop;

end;

执行时间如下:

c8b0cb33c35fe30ef0be17fbc661461a.png

这里直接写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;

执行时间:

77f1263099d25ec38c07b53476ea0d14.png

4. 使用connectby 集合写

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

该方法会将数据写入数据缓存中,执行时间:

ce9e7e2fff97bcb6f24fb0cc0260d566.png

5. 直接路径写法

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

该方式不经过缓存区,直接写入磁盘。执行时间:

80d68827b52feedcfc0274442ea1bc09.png

6. 并行写

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

执行时间为:

b89036a4e5f19102b11b234fa7f765a4.png

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐