[英]How to speed up a slow update query in SQL Server 2012
我有一個更新查詢,可以正常運行,但是速度太慢,需要2分鍾以上才能完成。 還有另一種方法可以編寫此查詢以加快查詢速度嗎? 這是我的代碼,謝謝:
UPDATE #tmpIMDS
SET
ModelFileName = b.ModelFileName,
SendEMail = b.SendEMail
FROM
(
SELECT DISTINCT
IMDSConversionReportData.ModelNumber,
ModelFileName,
'Send Email' AS SendEmail
FROM
IMDSConversionReportData,
(
SELECT DISTINCT
ModelNumber,
Max(DateAdded) AS DateAdded
FROM
IMDSConversionReportData
GROUP BY
ModelNumber) a
WHERE
IMDSConversionReportData.ModelNumber = a.ModelNumber
AND IMDSConversionReportData.DateAdded = a.DateAdded
) b
WHERE ModelID = b.ModelNumber
您可以生成row_number
來標識每個ModelNumber
列的最大DateAdded
,而不必兩次點擊IMDSConversionReportData
表來獲取每個ModelNumber
最大DateAdded
。
也除去distinct
當你與只選擇一個非聚合列group by
這是無意義的
嘗試這個
;WITH cte
AS (SELECT *,
'Send Email' AS SendEmail,
Row_number()OVER(partition BY ModelNumber ORDER BY DateAdded DESC) AS rn
FROM IMDSConversionReportData)
UPDATE t
SET ModelFileName = c.ModelFileName,
SendEMail = c.SendEMail
FROM #tmpIMDS t
INNER JOIN cte c
ON t.ModelID = c.ModelNumber
Where Rn = 1
注意:始終使用正確的INNER JOIN
語法連接兩個表,而不要使用舊式逗號分隔的連接。 我們總是發現INNER Join
語法更具可讀性 。 將過濾器放在Where
子句中
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.