Oracle SQL七次提速技巧
时间:2022-03-14 04:48
以下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;