單獨為某張表指定 INDEX Hint 時,優化器仍保有決定其他表存取路徑與連接方法的自由度,可能導致指定索引不被採用。為徹底掌控執行計畫,需採用「全套 Hint」策略:同時指定連接順序(ORDERED/LEADING)、連接方法(USE_NL/USE_HASH 等)及各表的存取路徑(INDEX/FULL)。
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,
jl_br_balances b,
gl_code_combinations glcc,
fnd_flex_values_vl glf,
gl_periods gp,
gl_sets_of_books gsb,
po_vendors p
WHERE ...;
此範例明確規定:依 FROM 子句順序連接;b 表使用指定索引;j/b 及 glcc/glf 採 Nested Loops;gp/gsb 採 Sort Merge Join。
| Hint | 說明 |
|---|---|
| ALL_ROWS | CBO,目標:最大吞吐量 |
| FIRST_ROWS(n) | CBO,目標:最佳回應時間(前 n 筆) |
| CHOOSE | 有統計用 CBO,無統計用 RBO |
| RULE | 強制使用 RBO |