慢速运行大表

时间:2017-09-20 04:04:17

标签: sql sql-server tsql

我有一个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

我怀疑是最后一次&#34;或&#34;声明。存在一个集群复合主键索引,其中包括NOMDate和Workgroup字段等。

是优化此更新声明的最佳方法吗?

1 个答案:

答案 0 :(得分:0)

更改您的位置

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())

甚至更好,使用局部变量来保存dateadd(mm,-18,getdate())