2015-11-04 93 views
1

我有一個更新查詢可以正常工作,但速度太慢,需要2分鐘才能完成。有沒有另外一種方法可以編寫這個查詢來加速它?這裏是我的代碼感謝:如何加快SQL Server 2012中緩慢更新查詢的速度

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 

回答

2

而是擊中IMDSConversionReportData表兩次以每ModelNumber最大DateAdded可以生成row_number識別每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子句中

+0

無法綁定多部分標識符「b.ModelFileName」。 無法綁定多部分標識符「b.SendEMail」。 – ChrisPasa

+0

我得到那些erorrs – ChrisPasa

+0

@ChrisPasa - 更新檢查現在 –