| Hint | 語法 | 效果 | 示例 |
| USE_NL_WITH_INDEX | USE_NL_WITH_INDEX(table [index]) | 強制 NL Join,且內表必須使用指定索引 (或至少一索引列參與 Join 條件) | /*+ USE_NL_WITH_INDEX(emp emp_idx) */ |
| NO_USE_NL | NO_USE_NL(table ...) | 禁止指定表作為 NL Join 內表,僅考慮 Hash/Sort-Merge | /*+ NO_USE_NL(emp dept) */ |
| NO_USE_MERGE | NO_USE_MERGE(table ...) | 禁止指定表作為 Sort-Merge Join 內表 | /*+ NO_USE_MERGE(emp dept) */ |
| NO_USE_HASH | NO_USE_HASH(table ...) | 禁止指定表作為 Hash Join 內表 | /*+ NO_USE_HASH(emp dept) */ |
| NO_INDEX_FFS | NO_INDEX_FFS(table index) | 禁止指定表的指定索引進行 Fast Full Scan | /*+ NO_INDEX_FFS(emp emp_pk) */ |
三、 統計信息輔助決策 Hints (動態調整優化器估算)
| Hint | 語法 | 含義 | 示例 |
| CARDINALITY | CARDINALITY([tablespec] n) | 告知優化器指定表/查詢結果集行數為 n | /*+ CARDINALITY(emp 5000) */ |
| SELECTIVITY | SELECTIVITY([tablespec] p) | 告知優化器指定表/聯接結果滿足條件比例為 p (0-1) | /*+ SELECTIVITY(emp 0.01) */ |
關鍵限制:同一組表同時指定 CARDINALITY 和 SELECTIVITY → 兩者均被忽略。
四、 使用建議與避坑
- 電子表格 Hints 僅影響
MODEL 子句 / 電子表格查詢,常規 SQL 無效
- NO_USE_* 系列為「負面 Hint」,用於排除優化器錯誤選擇的 Join 方法,優於強制正面 Hint (如
USE_HASH) 的剛性
- CARDINALITY/SELECTIVITY 適用於統計信息缺失/失真、動態采樣不足的臨時修正,**非永久方案**,根治靠
DBMS_STATS 收集準確統計
- Hints 會隨版本升級失效/語義變更,核心業務 SQL 建議用 SQL Plan Baseline / SQL Profile 固定計劃
五、 參考資源
更多 10g 新特性詳見 Mike Ault 著《Oracle Database 10g New Features》。
六、 總結
10g 新 Hints 聚焦三大領域:**電子表格編譯加速、Join 方法負面排除、統計信息動態注入**。「負面 Hint 避開錯誤路徑」比「正面 Hint 強制單一路徑」更符合現代優化器自適應理念。掌握這些工具,配合 Baseline 固化計劃,讓關鍵 SQL 性能可控、可預測。
- 上一篇文章: Oracle 遷移 MySQL 完整避坑指南:大小寫、保留字、數據類型、自增、索引長度五大差異與兼容性設計原則
- 下一篇文章: Oracle 異構服務 (Heterogeneous Services) 透明訪問 SQL Server 完整配置實戰
Copyright ©
程式碼之家 All Rights Reserved