Oracle 10g 引入多項新 Hint,賦予開發者更精細的執行計畫控制能力。本文梳理核心新 Hint 的適用場景、語法與範例。
忽略詳細關係依賴圖分析等編譯期優化規則,保留過濾建立、選擇性定位存取結構、修訂規則限制等優化。適用於規則數極大、編譯耗時達百小時的場景,可大幅縮短編譯時間。
SELECT /*+ SPREAD_MIN_ANALYSIS */ ...
完全禁用電子試算表分析,同樣忽略修訂規則與過濾產生。編譯時間可降至最低。
SELECT /*+ SPREAD_NO_ANALYSIS */ ...
強制 CBO 使用巢狀迴圈連接,且僅當指定表作為內部表且具備至少一個作為連接鍵的索引時生效。若未指定索引,CBO 必須能找到至少一個可用的索引鍵值連接條件。
SELECT /*+ USE_NL_WITH_INDEX(t1 t1_idx) */ ...
負向排除特定連接方法,僅針對指定表作為內部表的情況:
NO_USE_NL:禁用巢狀迴圈,僅考慮 Hash Join 與 Sort-Merge Join。NO_USE_MERGE:禁用 Sort-Merge Join。NO_USE_HASH:禁用 Hash Join。SELECT /*+ NO_USE_NL(emp dept) */ ...
SELECT /*+ NO_USE_MERGE(emp dept) */ ...
SELECT /*+ NO_USE_HASH(emp dept) */ ...
指定查詢或子查詢預估返回行數。若未指定表,則為整個查詢總行數。
SELECT /*+ CARDINALITY(t 1000) */ ...
指定查詢或子查詢選擇度(0~1)。單表時為滿足單表條件的行比例;多表時為所有條件合併後結果行比例。
SELECT /*+ SELECTIVITY(t 0.05) */ ...
注意:同一組表同時指定 CARDINALITY 與 SELECTIVITY 會被雙雙忽略。
禁止指定表在指定索引上執行 Fast Full Index Scan。
SELECT /*+ NO_INDEX_FFS(t idx_name) */ ...
Oracle 優化器日趨成熟,Hint 庫持續擴充。掌握上述新 Hint 可在複雜查詢、大規則集、特定連接模式場景中實現精準干預。更多 10g 新特性詳見 Mike Ault 著《Oracle Database 10g New Features》。