天天看點

Oracle資料庫SQL語句綁定變量一----性能問題

SQL語句編寫時,一般都是這樣的:

select * from emp where empno=7369;

或者select * from emp where empno=7499;

這兩條SQL語句對于Oracle來說是兩條不同的SQL語句,換句話說是執行兩條語句時,都會經曆:1、文法語義檢查;2、硬解析;3、形成執行計劃;4、傳回相應資料

大緻的步驟是這樣的,其中硬解析是非常消耗資源的,比如CPU,記憶體,其中SGA中的latch的争用是我需要重點提到的,因為這是一種串行結構。

綁定變量隻需要解析一次SQL語句的文本即可,換句話說,前面兩句語句可以寫成一條,讓Oracle重複使用已經解析好的資訊,比如解析樹,執行計劃等,話句話說執行:

select * from emp where empno=7499;時無需執行硬解析,減少了latch的争用。

詳細硬解析和軟解析,軟軟解析等以後再詳細介紹。

今天主要介紹下,綁定變量與沒有綁定變量的性能?

下面建立兩個過程proc1,proc2:

create or replace procedure proc1 as

begin

for i in 1 .. 10000 loop

execute immediate  'insert into t values('||i||')';

end loop;

end;

create or replace procedure proc2 as

begin

for i in 1 .. 10000 loop

execute immediate  'insert into t values(:x)' using i;

end loop;

end;

執行proc1:

Oracle資料庫SQL語句綁定變量一----性能問題

執行proc2:

Oracle資料庫SQL語句綁定變量一----性能問題

很明顯綁定變量與沒有綁定變量的性能差别是非常大的,這也是需要在開發應用程式中使用綁定變量的很重要的性能目的。

文章的參考:《Oracle程式設計藝術深入了解資料庫體系結構》