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

Oracle 10g 新優化器 Hints 全景:從試算表分析控制到連接與存取路徑微調

     編輯:Oracle 資料庫基礎

試算表優化控制 Hints

Hint效果適用場景
SPREAD_MIN_ANALYSIS略過詳細關係依賴圖分析等編譯期優化,保留過濾器建立與修訂規則限制規則極多(數千+) 導致編譯耗時數百小時時
SPREAD_NO_ANALYSIS完全停用試算表分析,亦略過修訂規則與過濾器產生,編譯時間降至最低確定無需分析、追求極致編譯速度

連接方法微調 Hints

Hint語法範例語義
USE_NL_WITH_INDEX/*+ USE_NL_WITH_INDEX(t1 t1_idx) */強制 Nested Loops,指定內表需有索引且連接鍵含索引鍵值;若無標籤則 CBO 自尋符合索引
NO_USE_NL/*+ NO_USE_NL(emp) */禁止指定表作內表的 Nested Loops,僅考慮 Hash/Sort-Merge
NO_USE_MERGE/*+ NO_USE_MERGE(emp dept) */禁止指定表作內表的 Sort-Merge
NO_USE_HASH/*+ NO_USE_HASH(emp dept) */禁止指定表作內表的 Hash Join

基數與選擇度干預

  • CARDINALITY([tablespec] card):指定查詢/子查詢回傳行數估計;未指定表則為整體查詢總行數。
  • SELECTIVITY([tablespec] sel):指定選擇度(0-1);單表為滿足單表條件行比例,多表為合併後滿足所有條件行比例。
  • 互斥:同組表同時出現兩者皆被忽略。

索引存取路徑控制

Hint語法效果
INDEX_SS/*+ INDEX_SS(t idx) */強制 Index Skip Scan(升序)
INDEX_SS_ASC/*+ INDEX_SS_ASC(t idx) */強制 Index Skip Scan 升序檢查
INDEX_SS_DESC/*+ INDEX_SS_DESC(t idx) */強制 Index Skip Scan 降序檢查
NO_INDEX_SS/*+ NO_INDEX_SS(t idx) */禁止 Index Skip Scan
NO_INDEX_FFS/*+ NO_INDEX_FFS(t idx) */禁止 Index Fast Full Scan

其他功能性 Hints

Hint效果
NO_STAR_TRANSFORMATION忽略星狀查詢轉換
CPU_COSTING啟用 CPU 成本模型(預設),估算 I/O 次數、類型與 CPU 週期
NO_CPU_COSTING關閉 CPU 成本,退回純 I/O 成本模型(單區塊讀指標)

使用建議

  • Hints 是「微調工具」而非「銀彈」,優先確保統計資訊準確、索引設計合理。
  • 試算表 Hint 僅影響 MODEL 子句編譯階段,不影響執行計劃。
  • 連接 Hint 若導致計劃惡化,CBO 可能仍選擇其他路徑(視版本與參數)。
  • 基數/選擇度 Hint 適用於統計資訊失真(如資料傾斜、關聯欄位)的緊急干預。
  • 參考 Mike Ault《Oracle Database 10g New Features》獲取更多實戰案例。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved