??? 綁定變量是Oracle解決硬解析的首要利器,能解決OLTP系統中library cache的過度耗用以提高性能。然刀子磨的太快,使起來鋒利,卻容
易折斷。凡事皆有利弊二性,因地制宜,因時制宜,全在如何權衡而已。本文講述了綁定變量的使用方法,以及綁定變量的優缺點、使用場合。
?
一、綁定變量
??? 提到綁定變量,就不得不了解硬解析與軟解析。硬解析簡言之即一條SQL語句沒有被運行過,處于首次運行,則需要對其進行語法分析,語
義識別,跟據統計信息生成最佳的執行計劃,然后對其執行。而軟解析呢,則是由于在library cache已經存在與該SQL語句一致的SQL語句文本
、運行環境,即有相同的父游標與子游標,采用拿來主義,直接執行即可。軟解析同樣經歷語法分析,語義識別,且生成hash value ,接下來
在library cache搜索相同的hash value ,如存在在實施軟解析。有關更多的硬解析與軟解析以及父游標,子游標請作如下參考:
???
??? 有關硬解析與軟解析,請參考:
Oracle 硬解析與軟解析
??? 有關父游標、子游標,請參考:
父游標、子游標與共享游標
???
??? 綁定變量
????? 首先其實質是變量,有些類似于我們經常使用的替代變量,替代變量使用&占位符,只不過綁定變量使用:
????? 替代變量使用時為 &variable_para,相應的綁定變量則為 :bind_variable_para
????? 通常一個SQL語句包含動態部分和靜態部分,占位符實質是SQL語句中容易發生變化的部分,通常為其條件或取值范圍。動態部分在一般情
????? 況下(數據傾斜除外),對執行計劃的生成的影響是微乎其微的。故同一SQL語句不同的動態部分產生的執行計劃都是相同的。
???????
二、綁定變量的使用
??? 1、在SQLPlus中使用綁定變量
??? 2、PL/SQL塊中使用綁定變量
??? 3、在存儲過程或包中使用綁定變量
??? 4、在動態SQL中是使用綁定變量????
???????
三、綁定變量的優缺點及使用場合
??? 優點:
??????? 可以在library cache中共享游標,避免硬解析以及與之相關的額外開銷
??????? 在大批量數據操作時將呈數量級來減少閂鎖的使用,避免閂鎖的競爭
?????
??? 缺點:
??????? 綁定變量被使用時,查詢優化器會忽略其具體值,因此其預估的準確性遠不如使用字面量值真實,尤其是在表存在數據傾斜(表上的數
??????? 據非均勻分布)的列上會提供錯誤的執行計劃。從而使得非高效的執行計劃被使用。
???
??? 使用場合:
??????? OLTP
??????????? 在OLTP系統中SQL語句重復執行頻度高,但處理的數據量較少,結果集也相對較小,尤其是使用表上的索引來縮小中間結果集,其
??????????? 解析時間通常會接近或高于執行時間,因此該場合適合使用綁定變量。
???????
??????? OLAP
??????????? 在OLAP系統中,SQL語句執行次數相對較少,但返回的數據量較大,因此多數情況下傾向于使用權標掃描更高效,其SQL語句執行時
??????????? 間遠高于其解析時間,因此使用綁定變量對于總響應時間影響不大。而且增加生成低效執行計劃的風險。即在在OLAP系統中使用字
??????????? 面量的性能高于使用綁定變量。
???
??? 注意:
??????? 對于實際的數據庫對象,如(表,視圖,列等),不能使用綁定變量替換,只能替換字面量。如果對象名是在運行時生成的,則需要對其
??????? 用字符串拼接,同時,sql只會匹配已經在共享池中相同的對象名。
?
四、相關參考
???
Oracle 硬解析與軟解析
???
???
父游標、子游標與共享游標
???
啟用用戶進程跟蹤
???
PL/SQL --> 動態SQL
???
PL/SQL --> 動態SQL的常見錯誤
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
