事物都存在兩面性,繫結變數對大多數oltp處理是適用的,但是也有例外。比如在where條件中的字段是「傾斜字段」的時候。
「傾斜字段」指該列中的絕大多數的值都是相同的,比如一張人口調查表,其中「民族」這列,90%以上都是漢族。那麼如果乙個sql語句要查詢30歲的漢族人口有多少,那「民族」這列必然要被放在where條件中。這個時候如果採用繫結變數@nation會存在很大問題。
試想如果@nation傳入的第乙個值是「漢族」,那整個執行計畫必然會選擇表掃瞄。然後,第二個值傳入的是「布依族」,按理說「布依族」佔的比例可能只有萬分之一,應該採用索引查詢。但是,由於重用了第一次解析的「漢族」的那個執行計畫,那麼第二次也將採用表掃瞄方式。這個問題就是著名的「繫結變數窺測」,建議對於「傾斜字段」不要採用繫結變數。
pl sql 繫結變數
在oracle 中,對於乙個提交的sql語句,存在兩種可選的解析過程,一種叫做硬解析,一種叫做軟解析.乙個硬解析需要經解析,制定執行路徑,優化訪問計畫等許多的步驟.硬解析不僅僅耗費大量的cpu,更重要的是會佔據重要的們閂 latch 資源,嚴重的影響系統的規模的擴大 即限制了系統的並發行 而且引起的...
oracle變數繫結
一 游標 游標可以理解為sql語句的乙個控制代碼,也叫sql語句的指標,游標指向一條sql語句,oracle會話要執行一條sql時,首先要開啟游標。二 sql解析的過程 硬解析步驟 1.對sql語句進行語法檢查,看是否有語法錯誤 2.通過資料字典,檢查sql語句中涉及的物件和列是否存在 3.檢查sq...
oracle 繫結變數
不太喜歡看到在procedure用 拼接sql的語句 所以貼了個繫結變數的例子,僅供參考 create or replace procedure using test t name nvarchar2 as v id char v char begin execute immediate selec...