2.1.1. 子查询内部表和外部查询走上等价的表关联
子查询展开后,子查询的 T3 表和外部查询 T2 表做了 hash 关联,他们是在同一层级上。
2.1.1.1. HASH JOIN ANTI 和 HASH JOIN RIGHT ANTI
上面执行计划中的 HASH JOIN ANTI 是指 HASH JOIN 的时候选择了主查询的 T2 表做驱动表,
如果选择子查询的 T3 表做驱动表,执行计划是 HASH JOIN RIGHT ANTI
2.1.1.2. Null-aware Anti join 特性
这里还有一个 NA,Null-aware Anti join 是尝试解决子查询 not in、not exists 中和 null
值相关的各种问题。
11g 之前,对于 not in 的子查询,子查询和主查询的关联列必须都有 not null 约束,
否则子查询无法展开为表连接
11g 开始推出 null-aware anti join 特性,此时即使关联列没有 not null 约束,优化
器也可以把子查询展开为表连接,相关隐含参数_optimizer_null_aware_antijoin
11g 版本开始默认开启该特性,该参数为 true 说明子查询和主查询的关联列即使没有 not
null 约束,子查询也可以展开为表连接。
评论