关于sqlserver一个查询语句的速度问题

这样查询的速度超级慢,要一分钟:SELECTx.ldmc,SUM(CASEWHENx.fqgdhISNOTNULLTHEN1ELSE0END)AStfsjl,SUM(CA... 这样查询的速度超级慢,要一分钟:
SELECT x.ldmc,
SUM(CASE WHEN x.fqgdh IS NOT NULL THEN 1 ELSE 0 END) AS tfsjl,
SUM(CASE WHEN x.fqgdh IS NULL THEN 1 ELSE 0 END) AS zjzyl
FROM
(
SELECT a.rwlsh,e.fqgdh,b.ldmc
FROM tgzctaskls_lz a
LEFT JOIN tldzd b ON a.lddm = b.lddm
LEFT JOIN ttaskmainls d ON a.rwlsh = d.gllsh
LEFT JOIN txcjlls_tfsj e ON d.rwgdh = e.fqgdh
WHERE 1 = 1
and convert(varchar(4), a.fqsj ,120) = '2018'
GROUP BY a.rwlsh,e.fqgdh,b.ldmc
) x
GROUP BY x.ldmc;

但是这样查询就很快,只要1s:
SELECT x.ldmc,
SUM(CASE WHEN x.fqgdh IS NOT NULL THEN 1 ELSE 0 END) AS tfsjl,
SUM(CASE WHEN x.fqgdh IS NULL THEN 1 ELSE 0 END) AS zjzyl
FROM
(
SELECT a.rwlsh,e.fqgdh,b.ldmc
FROM tgzctaskls_lz a
LEFT JOIN tldzd b ON a.lddm = b.lddm
LEFT JOIN ttaskmainls d ON a.rwlsh = d.gllsh
LEFT JOIN txcjlls_tfsj e ON d.rwgdh = e.fqgdh
WHERE 1 = 1
and a.fqsj >= '2018-01-01' AND a.fqsj < '2019-01-01'
GROUP BY a.rwlsh,e.fqgdh,b.ldmc
) x
GROUP BY x.ldmc;

想请教是什么原因导致这么慢
两者的区别就只是日期的那个条件:
一个是:
and convert(varchar(4), a.fqsj ,120) = '2018'
一个是:
and a.fqsj >= '2018-01-01' AND a.fqsj < '2019-01-01'
展开
 我来答
张伊笙
2018-09-27 · TA获得超过527个赞
知道小有建树答主
回答量:962
采纳率:85%
帮助的人:442万
展开全部
那肯定的,你用convert的话对比前先转换计算一次,然后在对比,计算两次。如果你这个字段有索引的话,那样索引就失效了
但是如果你直接对比的话,就只要一次计算,而且可以走索引
追问
那是不是可以这么说,能直接对比的话,就不要用convert
追答
是的,能简化则简化,不要给过多计算
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式