有学员在开发过程遇到下面类似SQL,执行效率比较差,我对SQL做了简化处理,如下:
select count(*)
from t1
left join t2 on t1.object_id...,不行,优化器只能生成如下执行计划(如果left join变成inner join,就能得到我想要的执行计划; 把 in 换成 exists ,也是一样的情况):
怎么办?...很简单的改写:
select
count(*) from t1 left join
(select * from t2 where t2.owner in (select username from...好消息就是,12c版本把这种情况考虑进去了,不需要改写,也能生成我想要的执行计划:
select count(*)
from t1
left join t2 on t1.object_id=t2....总结:
优化器是数据库性能的核心,SQL写法复杂多变,我们希望优化器能够更加聪明一些,但是毕竟还是基于规则而不是人工智能. 对于优化器规则有限制的情况,一般我们都能通过SQL改写来避免低效.