標籤:
以下SQL執行時間按序號遞減。
1,動態SQL,沒有綁定變數,每次執行都做硬解析操作,佔用較大的共用池空間,若共用池空間不足,會導致其他SQL語句的解析資訊被擠出共用池。
create or replace procedure proc1
as beginfor i in 1..100000 loop execute immediate ‘insert into t values(‘||i||‘)‘; commit; end loop;end; 2,動態SQL,綁定變數,SQL語句只要執行一次硬解析即可。create or replace procedure proc2asbeginfor 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 proc3asbeginfor i in 1..100000 loop insert into t values(i); commit; end loop;end; 4,批量提交,減少commit次數能顯著減少LGWR的觸發次數,commit操作不是寫資料,而是記錄SCN,所以commit操作的時間並不長,但提交量大時仍有區別。create or replace procedure proc4asbeginfor 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七次提速技巧