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

Oracle 10g 優化器 Hints 新特性速覽:電子表格、嵌套循環、基數/選擇性、Join 方法控制

     編輯:Oracle 資料庫基礎

前言:10g 優化器更智能,Hints 更精準

Oracle 10g 引入多個新 Hints,針對電子表格編譯優化、Join 方法精確控制、統計信息輔助決策。本文速覽核心新 Hints 語法、適用場景與示例。

一、 電子表格優化 Hints (Model Clause 相關)

二、 Join 方法精確控制 Hints

Hint作用適用場景示例
SPREAD_MIN_ANALYSIS跳過詳細依賴圖分析等編譯期優化,保留過濾/修訂規則優化規則極多 (數千+) 導致編譯耗時數小時SELECT /*+ SPREAD_MIN_ANALYSIS */ ...
SPREAD_NO_ANALYSIS完全禁用電子表格分析,忽略修訂規則與過濾生成極大規則集、編譯時間不可接受,需最快啟動SELECT /*+ SPREAD_NO_ANALYSIS */ ...

三、 統計信息輔助決策 Hints (動態調整優化器估算)

Hint語法效果示例
USE_NL_WITH_INDEXUSE_NL_WITH_INDEX(table [index])強制 NL Join,且內表必須使用指定索引 (或至少一索引列參與 Join 條件)/*+ USE_NL_WITH_INDEX(emp emp_idx) */
NO_USE_NLNO_USE_NL(table ...)禁止指定表作為 NL Join 內表,僅考慮 Hash/Sort-Merge/*+ NO_USE_NL(emp dept) */
NO_USE_MERGENO_USE_MERGE(table ...)禁止指定表作為 Sort-Merge Join 內表/*+ NO_USE_MERGE(emp dept) */
NO_USE_HASHNO_USE_HASH(table ...)禁止指定表作為 Hash Join 內表/*+ NO_USE_HASH(emp dept) */
NO_INDEX_FFSNO_INDEX_FFS(table index)禁止指定表的指定索引進行 Fast Full Scan/*+ NO_INDEX_FFS(emp emp_pk) */

關鍵限制:同一組表同時指定 CARDINALITY 和 SELECTIVITY → 兩者均被忽略。

四、 使用建議與避坑

  1. 電子表格 Hints 僅影響 MODEL 子句 / 電子表格查詢,常規 SQL 無效
  2. NO_USE_* 系列為「負面 Hint」,用於排除優化器錯誤選擇的 Join 方法,優於強制正面 Hint (如 USE_HASH) 的剛性
  3. CARDINALITY/SELECTIVITY 適用於統計信息缺失/失真、動態采樣不足的臨時修正,**非永久方案**,根治靠 DBMS_STATS 收集準確統計
  4. Hints 會隨版本升級失效/語義變更,核心業務 SQL 建議用 SQL Plan Baseline / SQL Profile 固定計劃

五、 參考資源

更多 10g 新特性詳見 Mike Ault 著《Oracle Database 10g New Features》。

六、 總結

10g 新 Hints 聚焦三大領域:**電子表格編譯加速、Join 方法負面排除、統計信息動態注入**。「負面 Hint 避開錯誤路徑」比「正面 Hint 強制單一路徑」更符合現代優化器自適應理念。掌握這些工具,配合 Baseline 固化計劃,讓關鍵 SQL 性能可控、可預測。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
Hint語法含義示例
CARDINALITYCARDINALITY([tablespec] n)告知優化器指定表/查詢結果集行數為 n/*+ CARDINALITY(emp 5000) */
SELECTIVITYSELECTIVITY([tablespec] p)告知優化器指定表/聯接結果滿足條件比例為 p (0-1)/*+ SELECTIVITY(emp 0.01) */