0
我有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字段。
是優化此更新聲明的最佳方式嗎?
問題尋求幫助的性能應包括DDL,DML的中如果您的測試數據很大,請嘗試腳本化表格的模式和統計信息(右鍵單擊數據庫 - >生成腳本 - >選擇特定數據庫對象 - >在下一個屏幕中選擇高級並選擇腳本統計信息)並粘貼它的問題。有了這個信息任何一個repro你正面臨同樣的問題。否則它變得很難回答你的問題。幫助 – TheGameiswar
您需要提供執行計劃和索引信息。在此之前,您可以嘗試在where子句中避免使用DateDiff。請參閱https://stackoverflow.com/questions/2547316/is-sql-datediffyear-an-expensive-computation –