查询语句加入 GROUP BY 后变得很慢。

zyszhx 2013-10-05 11:18:03
第一种写法 10几秒
SELECT YGBH,10 as GLF, SUM(CASE WHEN je < 0 THEN 0 ELSE je END) AS je
FROM (SELECT b.YGBH, ROUND(((a.FJBYYD - a.FJSYYD)
/ a.ZTS * b.SJTS - b.KYDS) * b.YFDJ, 0) AS JE
FROM (SELECT *
FROM JC_YGRZM
WHERE jzdh = 'JZ0028') a LEFT OUTER JOIN
(SELECT *
FROM JC_YGRZD
WHERE jzdh = 'JZ0028') b ON a.SSBH = b.SSBH) YGDF
GROUP BY YGBH

第二中写法 10几秒
Select YGBH,sum( CASE WHEN je < 0 THEN 0 ELSE je END) AS je from (
(select v2.YGBH,ROUND(((v1.FJBYYD - v1.FJSYYD) / v1.ZTS * v2.SJTS - v2.KYDS) * v2.YFDJ, 0) AS JE from JC_YGRZM v1 inner join JC_YGRZD v2
on v1.SSBH = V2.SSBH and v1.JZDH=v2.JZDH
where v1.JZDH='JZ0028') ) as df GROUP BY YGBH

第二中写法去掉 GROUP BY 语句只要1秒
select v2.YGBH,ROUND(((v1.FJBYYD - v1.FJSYYD) / v1.ZTS * v2.SJTS - v2.KYDS) * v2.YFDJ, 0) AS JE from JC_YGRZM v1 inner join JC_YGRZD v2
on v1.SSBH = V2.SSBH and v1.JZDH=v2.JZDH
where v1.JZDH='JZ0028'


不懂什么原因造成的,求解决。




...全文
3610 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
LongRui888 2013-10-10
  • 打赏
  • 举报
回复
应该是由于在第二种写法中产生的执行计划,没有第二种写法去掉group之后产生的执行计划好, 因为group by虽然会有排序,但是进行group by的时候,只是把内部的select语句查询查询出来的结果进行汇总,主要时间应该是花在cpu上的,一般都是很快的。 建议运行下面的语句,更新一下统计信息,如果表的数据量超大,最好不要在系统繁忙的时候运行:
update statistics JC_YGRZM
update statistics JC_YGRZD
如果还是不快,那么可以考虑加上查询提示option:
SELECT ygbh, 
       Sum(CASE 
             WHEN je < 0 THEN 0 
             ELSE je 
           END) AS je 
FROM   ((SELECT v2.ygbh, 
                Round(( ( v1.fjbyyd - v1.fjsyyd ) / v1.zts * v2.sjts - v2.kyds ) 
                      * 
                      v2.yfdj, 0) 
                AS JE 
         FROM   jc_ygrzm v1 
                INNER JOIN jc_ygrzd v2 
                        ON v1.ssbh = V2.ssbh 
                           AND v1.jzdh = v2.jzdh 
         WHERE  v1.jzdh = 'JZ0028')) AS df 
GROUP  BY ygbh  
option(hash group) --添加这行,如果还是不快改为: option(order group)
flyfly2008 2013-10-06
  • 打赏
  • 举报
回复
过来看看,听高手解答
發糞塗牆 2013-10-05
  • 打赏
  • 举报
回复
group by 通常会引起排序,把两个执行计划贴出来,不过你那个去掉之后本身就语义不同,没什么可比性
Kingdee_alex 2013-10-05
  • 打赏
  • 举报
回复
是啊,去掉后没有了排序功能。

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧