首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle INDEX Hint 進階:全套 Hint 策略確保最優計畫

     編輯:Oracle 資料庫基礎

單獨為某張表指定 INDEX Hint 時,優化器仍保有決定其他表存取路徑與連接方法的自由度,可能導致指定索引不被採用。為徹底掌控執行計畫,需採用「全套 Hint」策略:同時指定連接順序(ORDERED/LEADING)、連接方法(USE_NL/USE_HASH 等)及各表的存取路徑(INDEX/FULL)。

全套 Hint 實戰範例

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 快查表

Hint說明
ALL_ROWSCBO,目標:最大吞吐量
FIRST_ROWS(n)CBO,目標:最佳回應時間(前 n 筆)
CHOOSE有統計用 CBO,無統計用 RBO
RULE強制使用 RBO

關鍵提醒

  • 全套 Hint 雖強大,但維護成本高;資料量或結構變動時需同步檢視。
  • 優先考慮收集完整統計資訊、建立適當索引,讓 CBO 自行決策;Hint 為最後手段。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved