基於成本的優化器(CBO)在絕大多數情況下能選擇最優路徑,但偶爾會「聰明反被聰明誤」,產生極差執行計劃。此時 DBA 需人為干預,指定存取路徑、連接類型、連接順序、並行度等,使語句高效運行。
ALL_ROWS(吞吐量)或 FIRST_ROWS(響應速度){DELETE|INSERT|SELECT|UPDATE} /*+ hint [text] [hint[text]]... */
-- 或
{DELETE|INSERT|SELECT|UPDATE} --+ hint [text] [hint[text]]...
關鍵規則:
/*+ 中 + 不可有空格/*+ RULE */ 外,任何 Hint 皆會強制啟用 CBO;若無統計資訊,將使用預設值——建議定期收集統計資訊單一 Hint(如 INDEX)可能因優化器選擇其他連接方法而失效。為確保計劃完全可控,需同時指定:索引、連接方法、連接順序等「全套 Hints」。
SELECT /*+ ORDERED
INDEX (b, jl_br_balances_n1)
USE_NL (j b)
USE_NL (glcc glf)
USE_MERGE (gp gsb) */
b.application_id, b.set_of_books_id,
b.personnel_id, p.vendor_id Personnel,
p.segment1 PersonnelNumber, p.vendor_name Name
FROM jl_br_journals j, ...
ORDERED:強制按 FROM 子句順序連接INDEX:指定表 b 使用特定索引USE_NL / USE_MERGE:指定連接算法