Oracle綁定變量窺探(2)
http://gldbhome.blog.51cto.com/1552935/885553
Bind Peeking是Oracle 9i中引入的新特性,一直持續到Oracle 10g R2。它的作用就是在SQL語句硬分析的時候,檢視一下目前SQL謂詞的值
,以便生成最佳的執行計劃。而在oracle 9i之前的版本中,Oracle 隻根據統計資訊來做出執行計劃。
一、綁定變量窺探
使用SQL首次運作時的值來生成執行計劃。後續再次運作該SQL語句則使用首次執行計劃來執行。
影響的版本:Oracle 9i, Oracle 10g
對于綁定變量列中的特殊值或非均勻分布列上的綁定變量會造成非高效的執行計劃被選擇并執行。
要注意的是,Bind Peeking隻發生在硬分析的時候,即SQL被第一次執行的時候,之後的變量将不會在做peeking。我們可以看出,Bind
peeking并不能最終解決不同謂詞導緻選擇不同執行計劃的問題,它隻能讓SQL第一次執行的時候,執行計劃選擇更加準确,并不能幫助OLAP
系統解決綁定變量導緻執行計劃選擇錯誤的問題。這也是OLAP不應該使用綁定變量的一個原因。
更确切地說,綁定變量窺探是在SQL解析的實體階段,查詢優化器将會窺探綁定變量的值并将其作為字面量來使用。即ORACLE首次解析
SQL時會将變量的真實值代入産生執行計劃,後續對所有使用該綁定變量SQL語句都采用首次生存的執行計劃。如此這般?那性能究竟如何?
結果是并非最佳的執行計劃的使用。此問題在Oracle 11g中得以解決。
請參考:Oracle自适應共享遊标
二、示例綁定變量窺探
1、建立示範環境