Oracle 10g 引入多項強大的優化器提示,讓 DBA 能更精準地控制查詢優化行為。本文詳細解析九大核心 Hint 的語法、適用場景與實戰範例,助您掌握進階 SQL 調優利器。
忽略詳細關聯依賴圖分析等編譯期優化規則,保留過濾建立、選擇性存取結構限制等優化。適用於規則極多導致編譯時間過長(達百小時)的場景,可大幅縮短編譯時間。
SELECT /*+ SPREAD_MIN_ANALYSIS */ ...
完全禁用電子表格分析,同樣忽略修訂規則與過濾產生。若存在電子表格分析,此 Hint 可將編譯時間壓縮至最低。
SELECT /*+ SPREAD_NO_ANALYSIS */ ...
強制 CBO 透過巢狀迴圈將指定表加入連接,且僅在特定條件下使用該表作為內部表:若無指定索引,CBO 必須能使用至少一個作為連接鍵的索引;反之亦然。
SELECT /*+ USE_NL_WITH_INDEX(polrec polrind) */ ...
三大「否定型」連接提示,分別禁止巢狀迴圈、排序合併、雜湊連接,強制優化器在剩餘連接方法中選擇。
/*+ NO_USE_NL(employees) */
/*+ NO_USE_MERGE(employees dept) */
/*+ NO_USE_HASH(employees dept) */
定義查詢或查詢片段回傳的預估基數(總行數)。若未指定表,則針對整個查詢結果集。
SELECT /*+ CARDINALITY([tablespec] card) */ ...
定義查詢或查詢片段的預估選擇性。單表時為滿足所有單表判斷的行比例;多表時為所有判斷條件套用後的結果行比例。
SELECT /*+ SELECTIVITY([tablespec] sel) */ ...
關鍵限制:若同一組表同時定義 CARDINALITY 與 SELECTIVITY,兩者皆會被忽略。
禁止指定表的指定索引執行快速全索引掃描。
/*+ NO_INDEX_FFS(tablespec indexspec) */
Oracle 10g 的 Hint 體系日趨成熟豐富,掌握這九大新提示可在複雜查詢、電子表格運算、大數據連接等場景中獲得精準控制力。建議 DBA 結合實際執行計畫分析,謹慎測試後再應用於生產環境。更多深度內容可參考 Mike Ault 著《Oracle Database 10g New Features》。