我在SQL Server上有一个更新,该更新需要很长时间才能运行。代码如下:
update
f
set
f.WorkKey = d.WorkKey,
f.LastModifiedDtm = GETDATE()
from
f_cic_i_agent_queue f
join
NMWork d
on
f.Workgroup = d.WorkCode
and
f.NOMDate >= d.StartDate and
(f.NOMDate <= d.EndDate or d.EndDate is null)
where
datediff(mm,f.NOMDate,getdate()) <= 18
我怀疑这是最后一个"或"语句。有一个聚类的复合主键索引,其中包括Nomdate和Workgroup字段等。
是优化此更新语句的最佳方法吗?
更改您的statment
update
f
set
f.WorkKey = d.WorkKey,
f.LastModifiedDtm = GETDATE()
from
f_cic_i_agent_queue f
join
NMWork d
on
f.Workgroup = d.WorkCode
and
f.NOMDate >= d.StartDate and
(f.NOMDate <= d.EndDate or d.EndDate is null)
where
f.NOMDate>dateadd(mm,-18,getdate())
甚至更好,请使用本地var保存DATEADD(mm,-18,getDate())