今天一个女生咨询我报名学优化。聊着聊着就让我优化一个sql
因为怕泄密,所以删除了 sql 。不好意思
该sql是 olap 的, 在oracle10g 上面跑。跑一次要33秒钟,一般olap报表,最好的客户体验要在5秒以内。
大家注意看,sql里面有full join,在oracle10g里面,full join默认会扫描2次,一次left join 一次right join 然后union all. 这样肯定慢了。在11g 只扫描1次。
10g 里面可以用 一个hint /*+ NATIVE_FULL_OUTER_JOIN */ ,让他们扫描1次
加了hint之后,SQL 3秒能出结果,她还问能否进一步优化,因为要讲课了,8点半讲课,没啥时间,明天帮忙看吧。
注意,这个hint别放在 第一个select 后面,这样是没用的。要放在 from (select /*+ NATIVE_FULL_OUTER_JOIN */ COALESCE(wocode,
也就是说要离full join 最近的一个 select 。至于为什么,请自己 google query block 关键字, hint一般只在 query block 生效。