日期:2014-05-18  浏览次数:20574 次

去掉left join,反而慢了!
select *
from t1 inner join t2 on ...
inner join t3 on ...
left join fn() on ...

后来觉得fn()没有作用,去掉left join ,
发现查询速度慢了好几倍,加上后反而快得多!

怎么可能呢?

------解决方案--------------------
看一下执行计划,是不是去掉后,就不使用某个索引了。
------解决方案--------------------
select * 
from t1 inner join t2 on ... 
inner join t3 on ... 
left join fn() on ... 



select * 
from t1 inner join t2 on ... 
inner join t3 on ... 

这个快?

这是不可能的。

------解决方案--------------------
也有这个可能:left join fn()... 之后限制了很多行集,SQL显示处理过程快一些,所以总体感觉快了。
------解决方案--------------------
查看下执行计划,看慢在了哪一步
------解决方案--------------------
但因为是 left join 所以应该不会是这种情况啊
------解决方案--------------------
会不会是搞了视图索引啊?
------解决方案--------------------
恩,觉得小楼说 的有道理,
可能之前要操作100行,加leftjoin后,只操作10行了,
感觉速度反而快了
------解决方案--------------------
on 操作是在数据出来后再做率选 .肯定是索引的原因
------解决方案--------------------
筛选了走嵌套循环了吧,导致执行的成本小于你hash的成本,呵呵,具体看执行计划了,只是经验猜测