今天一个女生咨询我报名学优化。聊着聊着就让我优化一个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 keyword。 hint一般仅仅在 query block 生效。
时间: 2024-10-13 14:38:32