《基于ORACLE的SQL优化读书》笔记 子查询展开/视图合并

查询转换是硬解析的第一步,在9i 中,它在CBO之前执行。10G以后,属于CBO的一部分。CBO会对查询转换做成本估算。

子查询展开:

将子查询拆开:不能做子查询展开的子查询通常在目标SQL的执行计划的最后一步才会被执行,并且走FILTER类的执行方式。改写不基于成本!!where条件为exists,in,=any的子查询,ORACLE会转换成相应的半连接。Notexists, not in,<>ALL 的子查询,ORACLE会转成反连接。

把子查询转换成内嵌的视图:改写是基于成本的,如果成本过大,则不会改。

 

IN 等于 =ANY,NOT IN 等于<>ALL

视图合并:

与子查询展开一样,都是是让优化器有更多的选择。

分为:

简单视图合并:不含外连接,视图中没有聚合函数,不含有UNION,UNION ALL,INTERECT,MINUS,CONNECT BY ,ROWNUM.简单视图合并等价改写的SQL一定是小于或等于不改写的SQL的,COST相等时也会采用改写。不做合并时,计划中会出现VIEW。关键字

外连接视图合并:表与视图,或是视图自身的定义有外连接。能做外连接视图合并的条件:目标视图作为外连接的驱动表或是作为被驱动表但只含有一个表。

复杂视图合并:含有group by ,distinct操作的延迟到之后再做。性能不一定会有提升。是否用成本来决定。_OPTIMIZER_COST_BASED_TRANSFORMATION  默认值为LINEAR,altersession set “_optimizer_cost_based_tranformation”=off;是否允许做复杂视图合并,_complex_view_merging

Alter session set “_complex_view_merging” =false;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值