如何在SQL Server 2012中加速慢速更新查询

如何在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,

我有一个运行良好的更新查询,但速度太慢,需要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

您可以生成
行号
以识别每个
型号
列的最大
日期添加
值,而不是两次点击
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”。