參考來源:SQL綁定變量
在 SQL 語句中,綁定變量是一個占位符。例如,為了查詢員工號為 123 的員工的信息,可以查詢:
1 )select * from emp where empno=123;
另外,也可以查詢:
2 )select * from emp where empno=:empno?
在 1)中:每次查詢都是一個新查詢,即在數據庫共享池中以前沒有過的查詢。每次查詢必須經過分析、限定(名稱解析)、安全檢查、優化等等,簡單地說,執行的每條語句在每次執行時都將必須經過編譯。
在第二個查詢 2 )中使用了綁定變量 :empno ,它的值在查詢執行時提供。查詢經過一次編譯后,查詢方案將存儲在共享池中,可以用來檢索和重用。在性能和可伸縮性方面,這兩者的差異是巨大的,甚至是驚人的。
什么時候不應該/不必要使用綁定變量?
a. 如果你用數據倉庫,一條大查詢一跑幾個小時,根本沒必要做綁定變量,因為解析的消耗微乎其微。
b. 變量對優化器產生執行計劃有很重要的影響的時候:綁定變量被使用時,查詢優化器會忽略其具體值,因此其預估的準確性遠不如使用字面量值真實,尤其是在表存在數據傾斜(表上的數據非均勻分布)的列上會提供錯誤的執行計劃。從而使得非高效的執行計劃被使用。