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;
执行时间为:
版权声明:本文为Mr_XiaoJie原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。