SQL语句优化,求大神指点 5C

如题需要优化SQL语句如下:
update a set a.syxssl = b.syxssl from #ypkcjbxx a,(select CYYMC,CWZDM,CWZMC,sum(NSL)'syxssl' from HJY_GYL_HCXS where DXHSJ between CONVERT(CHAR(10),DATEADD(month,-1,DATEADD(dd,-DAY(GETDATE())+1,GETDATE())),120)+' 00:00:00.000' and CONVERT(CHAR(10),DATEADD(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate()),0)),120)+' 23:59:59'group by CYYMC,CWZDM,CWZMC)b
where
a.yymc = b.CYYMC
and
a.hcbm = b.CWZDM

赐予执行完成需要5分钟,怎么优化,求大神指点!!

sql

3个回答

你先检查一下b的执行效率,另外看你的sql是全表更新,可以限制同时只能进行一个更新操作,可以考虑把B创建成临时表,更新之前把数据入表,更新后清除

guangcaiwudong
Kevin.Y.K 回复Jasonchne: 不是限制更新一条数据,你这个更新可以多个人同时操作吗?限制操作加锁/标识就好了
4 个月之前 回复
Jasonchne
Jasonchne 怎么限制同时只能更新一条数据?
4 个月之前 回复

效率应该都损失在b表的select语句,where条件里用了太多的内置计算函数会极大影响效率,可以考虑其他方式直接生成日期标量值,然后再传给where语句内。

Jasonchne
Jasonchne 生成日期标量值,就只能更新在日期范围之内的数据啊
4 个月之前 回复

把B建成临时表,关联字段加索引这样是最省事的

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问