0
Oracle中的查询转换整理
104
27页
6次
墨值10
1. 查询转换的概念和过程
Oracle 中的查转换又称为查改写,意思在对 SQL 行解析的候可其做
等价改写。
1 用户提交 SQL
2 语法语义权限检查
3 有匹配的子游标直接使用
4 没有匹配子游标-进入查询转换阶进 SQL 改写-查询优化阶段选择最优执行计划
5 用户实际执行
2. 查询转换中的常用 hint
2.1. 子查询展开
执行计划中子查询一般作为一个独立处理单元放在最后执行,走 filter 的执行计划。
如果使用/*+ unnest */将子查询展开,也就是将子查询转换为子查询本身和外部查询之间
等价的表连接,分为两种可能:
1 将子查询内部的表拿出来和外部查询走上等价的表关联,此时子查询内部的表和外
部查询的表是在同一层级上,这种方式不考虑成本会直接展开。
2 将子查询转换为内嵌视图和外部表做关联,考虑成本,只有成本小于原 SQL 才展开。
测试过程:
子查询不展开 filter 的执行计划:
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 约束,子查询也可以展开为表连接。
of 27

评论

最新上传
暂无内容,敬请期待...
下载排行榜
周榜月榜总榜
近期活动
全部
暂无活动,敬请期待...
相关课程
全部
暂无课程,敬请期待...