语句大概为
select sum(...), sum(...), [...约15个]
from A
left join B on ...
left join C on ...
left join D on ...
[...约6个]
where C.[...] <= D.[...]
group by A.[...], B.[...]注:...为省略问题如下
    若将 where 一行代码去除,查询时间为 <= 2秒
    加入 where 一行代码,查询时间为 1分20秒~1分22秒
求助各位 大侠,望不吝赐教原因及解决方法,拜谢!

解决方案 »

  1.   

    WHERE 条件上,连接条件上加上相应索引,分组统计的考虑加聚集
      

  2.   

    你把group by A.[...], B.[...] 这行去掉看多少?
      

  3.   

    把Sum, Count, Max 及 Group By 去掉后现象一样
     + where 1分20秒 +
     - where 2秒 -
      

  4.   

    left join on 中左表的全部记录将全部被查询显示
    where 是對以上條件產生的副表進行再次篩選
    所以兩次的效率不一樣
    結果應該也不一樣
    不知道這樣解釋合理不
      

  5.   

    同意,呵呵,水哥说得是,WHERE是再查了一次
      

  6.   

    改成 inner join C ... inner join D ... 结果一样
    条件里加上 原 where 的条件 时间就变成 1分20秒 + ,不加就 < 2秒
      

  7.   

    WHERE 条件不等同于AND 条件,是会过滤的
      

  8.   

    如果改成Inner 你把 
    where 條件 放到 on後面
    把where 去掉 得到結果是一樣的
      

  9.   

    这个问题没那么简单加上where条件之後,影响了优化器的选择,可能选择了一个在优化器看来最快的一个计划才会出现这个个结果。一般来说,要解决这类问题,需要比较前後两种执行计划的差异,找到问题点才好下手。
      

  10.   

    唉~~~ SQL SERVER 的 Where 执行原理到底是什么,如果只是简单的在结果里筛选,按理说不可能出现 50+ 倍的性能损失,难道 字段 的数量会对 Where 产生这么大的影响?