Oracle 优化器提示:UNNEST、NO_UNNEST
1 UNNEST 与 NO_UNNEST
UNNEST(子查询展开)是 Oracle 优化器处理子查询的核心技术,相关提示用于干预优化器的自动选择。
1.1. 子查询展开原理
1.2. 使用场景对比
| 提示 | 执行计划 | 适用场景 | 风险 |
|---|---|---|---|
UNNEST |
嵌套循环/Hash Join | 1. 大表关联小表<br>2. 子查询结果集小<br>3. 关联条件选择性高 | 可能导致笛卡尔积爆炸 |
NO_UNNEST |
Filter操作 | 1. 子查询非常复杂<br>2. 关联条件无索引<br>3. 执行路径已最优 | 可能造成性能瓶颈 |
1.3. 使用示例
1.4. 嵌套类型转换
Oracle 支持三种嵌套方式:
2 实战应用场景
场景1:多层嵌套优化
场景2:参数化查询
3 使用禁忌
-
NOT IN + NULL 警告
-
基数估计陷阱
4 诊断工具
5 最佳实践原则
- 测试驱动:所有提示需通过SQL性能分析器(SPA)验证
- 渐进优化:
text复制
- 版本适配:
- Oracle 12c+:优先使用
VECTOR_TRANSFORM和USE_HASH_AGGREGATION - Oracle 19c:利用自适应特性
ADAPTIVE_PLAN
- Oracle 12c+:优先使用
- 文档记录:所有手动提示需注释原因和测试数据
通过合理组合这些提示,可在TP场景下提升20-300倍性能,但需结合业务数据特征谨慎使用。
posted on
浙公网安备 33010602011771号