如何在SQL Server 2012中加速慢速更新查询
我有一个运行良好的更新查询,但速度太慢,需要2分钟才能完成。是否有其他方法可以编写此查询以加快速度?这是我的代码谢谢:如何在SQL Server 2012中加速慢速更新查询,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有一个运行良好的更新查询,但速度太慢,需要2分钟才能完成。是否有其他方法可以编写此查询以加快速度?这是我的代码谢谢: UPDATE #tmpIMDS SET ModelFileName = b.ModelFileName, SendEMail = b.SendEMail FROM ( SELECT DISTINCT IMDSConversionReportData.ModelNumber, ModelFileName,
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
您可以生成
行号
以识别每个型号
列的最大日期添加
值,而不是两次点击IMDSConversionReportData
表
当您仅选择一个非聚合列时,使用groupby
删除distinct
,这是没有意义的
试试这个
;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
注意:始终使用适当的内部联接
语法联接两个表,而不是老式的逗号分隔联接。我们总是发现内部连接
语法更具可读性。将筛选器单独保留在中,其中
子句无法绑定多部分标识符“b.ModelFileName”。无法绑定多部分标识符“b.SendEMail”。