SQL 提交後,Oracle 檢查共用池是否存在完全相同語句。若存在 → 軟解析 (複用計畫);否則 → 硬解析。綁定變數確保 SQL 文本恆定,強制走軟解析路徑,大幅降低 CPU 與 Latch 開銷。
9i 時代 RBO (規則基礎最佳化) 對綁定變數敏感度較低。10g 棄用 RBO、全面 CBO 後,最佳化器高度依賴統計資訊與綁定變數窺探,綁定變數帶來的計畫穩定性與複用效益顯著放大。配合 11g Adaptive Cursor Sharing 自動針對不同綁定值生成多個子計畫,完美平衡複用與精準度。
SELECT fname, lname, pcode FROM cust WHERE id = 674;
SELECT fname, lname, pcode FROM cust WHERE id = 234;
SELECT fname, lname, pcode FROM cust WHERE id = 332;
SELECT fname, lname, pcode FROM cust WHERE id = :cust_no;
SQL> SET TIMING ON
SQL> VARIABLE x NUMBER
SQL> EXEC :x := 8
PL/SQL 程序已成功完成。
已用時間: 00:00:00.00
後續即可執行 SELECT ... WHERE id = :x 觀察執行計畫複用情況。
當欄位有索引且存在極端熱門值 (如狀態碼 'A' 佔 95%) 時:
DBMS_STATS.GATHER_TABLE_STATS(..., METHOD_OPT => 'FOR COLUMNS SIZE 254 status')OPT_ESTIMATE Hint 強制最佳化器重新評估。_optim_peek_user_binds (預設開啟) 讓 ACS 自動處理。綁定變數是 OLTP 系統效能基石。正確使用原則:高頻交易 SQL 全面綁定;低頻/倉庫型 SQL 酌情字面值;歪斜欄位配合統計資訊與 ACS。這才是 CBO 時代的成熟用法。