1 HASH_AJ 深度应用
HASH_AJ 提示强制优化器使用 Hash Anti-Join 算法处理 NOT EXISTS/NOT IN 子查询
1.1. 执行计划对比
1.2. 改写后的SQL
SELECT
FROM
customers c
LEFT JOIN
orders o
ON
o.cust_id = c.cust_id
WHERE o.cust_id IS NULL; -- 反连接核心条件
1.3. 性能对比(百万级数据测试)
| 算法 | 响应时间 | 内存消耗 | CPU消耗 |
|---|---|---|---|
| Nested Loop | 12.7s | 35MB | 98% |
| Hash Anti-Join | 0.8s | 152MB | 45% |
| Merge Anti-Join | 1.2s | 78MB | 60% |
1.4. 联合使用技巧
2 实战应用场景
场景1:海量数据排除
3 使用禁忌
-
NOT IN + NULL 警告
-
基数估计陷阱
4 诊断工具
5 最佳实践原则
- 测试驱动:所有提示需通过SQL性能分析器(SPA)验证
- 渐进优化:
- 版本适配:
- Oracle 12c+:优先使用
VECTOR_TRANSFORM和USE_HASH_AGGREGATION - Oracle 19c:利用自适应特性
ADAPTIVE_PLAN
- Oracle 12c+:优先使用
- 文档记录:所有手动提示需注释原因和测试数据
通过合理组合这些提示,可在TP场景下提升20-300倍性能,但需结合业务数据特征谨慎使用。
posted on
浙公网安备 33010602011771号