标签:
以下SQL执行时间按序号递减。
1,动态SQL,没有绑定变量,每次执行都做硬解析操作,占用较大的共享池空间,若共享池空间不足,会导致其他SQL语句的解析信息被挤出共享池。
create or replace procedure proc1
as
begin
for i in 1..100000 loop
execute immediate ‘insert into t values(‘||i||‘)‘;
commit;
end loop;
end;
2,动态SQL,绑定变量,SQL语句只要执行一次硬解析即可。
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;
3,静态SQL语句,在执行之前的编译阶段就已经解析,动态SQL在执行的过程中再解析。
create or replace procedure proc3
as
begin
for i in 1..100000 loop
insert into t values(i);
commit;
end loop;
end;
4,批量提交,减少commit次数能显著减少LGWR的触发次数,commit操作不是写数据,而是记录SCN,所以commit操作的时间并不长,但提交量大时仍有区别。
create or replace procedure proc4
as
begin
for i in 1..100000 loop
insert into t values(i);
end loop;
commit;
end;
5,逐条插入变成集合操作,整批地写入DATA BUFFER中,然后再刷新到硬盘。
insert into t select rownum from dual connect by level<=100000;
6,直接路径读写方式:跳过DATA BUFFER,将数据直接写入到硬盘。
缺点:在DATA BUFFER中没有预存,所以此操作后的第一次读会有物理读。
优点:一般用于海量数据迁移,数据量远超物理内存。
create table t as select rownum x from dual connect by level <= 100000;
7,依据硬件环境,开启一定的并行。
缺点:占用大量CPU资源。
create table t nologging parallel xx as select rownum x from dual connect by level <= 100000;
Oracle SQL七次提速技巧
标签:
原文地址:http://www.cnblogs.com/jandison/p/4212390.html