繫結變數的測試
前言: Oracle在執行SQL語句時,普遍存在以下幾個步驟:當SQL語句首次執行,Oracle將確認該句語句的語法是否正確(語法解析Syntax parse)並進一步確認語句相關表和列的存在性等因素(語義解析semantic parse)以及優化器決定執行計劃等步驟。整個過程稱之為硬解析,硬解析消耗大量的CPU時間和系統資源。硬解析過多會有效降低系統效能。 若之前已進行過硬解析,且解析後的分析樹和執行計劃仍存在於共享池中,則同樣的SQL僅需要軟解析。軟解析將輸入的SQL語句轉換為雜湊程式碼,同共享池內雜湊連結串列上的已有記錄進行對比,找出對應的遊標資訊,使用已有的執行計劃執行。繫結變數,將實際的變數值代入SQL語句中。 執行SQL語句,查詢語句將返回結果集。 不使用繫結變數的SQL語句,Oracle無法將它們視為相同的,如以下兩句語句: select * from emp where empno=1234 select * from emp where empno=5678 因為自由變數的不同,Oracle認為以上是2句不同的語句,則當第一條被硬解析後,第二條SQL執行時仍無法避免硬解析。實際在以上不使用繫結變 量的情況中,只要自由變數有所改變則需要一次硬解析。這是強烈建議使用繫結變數的主要原因,使用繫結變數的語句變數的實際值僅在SQL執行的最後階段被代 入。如以下語句: select * from emp where empno=:x 該語句使用繫結值:x替代自由變數,在應用中語句可能以預編譯或普通編譯的方式存在,僅在執行階段代入變數值,多次執行僅需要一次硬解析,較不使用繫結變數情況效能大大提升。
測試步驟:
測試方法:分別使用繫結變數和不使用繫結變數分別向表中插入10000條資料,測量所使用的時間:
測試前請先執行以下指令碼:
步驟1:set echo on;(把執行結果顯示出來)
步驟2:alter system flush shared_pool;這條語句是清空共項池,每次都必須使用,確保共享池是空的,以提高執行效率;
步驟3:set timing on(開啟記時器.)
一、繫結變數的測試
1、建立表A1,指令碼:create table A1(x int);
2、帶引數的儲存過程
create or replace procedure pro1
as
begin
for i in 1 .. 100000
loop
execute immediate
'insert into A1 values(:x)' using i;
end loop;
end;
/
執行結果:
SYS@orcl> exec pro2;
PL/SQL procedure successfully completed.
Elapsed: 00:00:57.42
二、不帶繫結變數的測試
create table A2(x int);
create or replace procedure pro2
as
begin
for i in 1 .. 100000
loopexecute immediate'insert into A2 values('||i||')';end loop;end;執行看看結果:
SYS@orcl>exec pro1
PL/SQL procedure successfully completed.
Elapsed: 00:00:07.60
總結:使用繫結變數的速度和不使用繫結變數相差的數量級不是同一個等級的;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12679300/viewspace-1138107/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle繫結變數的測試Oracle變數
- 繫結變數窺視測試案例變數
- SQL使用繫結變數,測試例項。SQL變數
- 繫結變數窺測的演變變數
- 繫結變數窺測變數
- PL/SQL中繫結變數使用的簡單測試SQL變數
- 繫結變數變數
- 【SQL 調優】繫結變數窺測SQL變數
- 繫結變數之繫結變數窺探(Bind Peeking)變數
- Oracle 繫結變數Oracle變數
- 檢視繫結變數變數
- PLSQL使用繫結變數SQL變數
- Oracle之繫結變數Oracle變數
- 關於繫結變數變數
- 關於繫結變數的SQL繫結什麼值變數SQL
- 繫結變數的一個例子變數
- 繫結變數的使用範圍變數
- 查詢繫結變數的值變數
- 關於繫結變數的使用變數
- 【優化】使用繫結變數 OR 不使用繫結變數,這不是問題!優化變數
- ORACLE 繫結變數用法總結Oracle變數
- 使用繫結變數的一點總結!變數
- 【最佳化】使用繫結變數 OR 不使用繫結變數,這不是問題!變數
- Oracle 變數繫結與變數窺視合集Oracle變數
- Oracle 繫結變數窺探Oracle變數
- oracle 繫結變數(bind variable)Oracle變數
- 如何獲取繫結變數變數
- Oracle 繫結變數 詳解Oracle變數
- 關於DSS中的繫結變數變數
- 檢視未繫結變數的sql變數SQL
- 獲取sql繫結變數的值SQL變數
- 從不繫結變數與繫結變數兩種情況討論柱狀圖的作用變數
- MySQL高階特性——繫結變數MySql變數
- SQL Developer中使用繫結變數SQLDeveloper變數
- 繫結變數之基本概念變數
- ORACLE 獲取繫結變數值Oracle變數
- 繫結變數及其優缺點變數
- 繫結變數和BIND PEEKING變數