簡體   English   中英

如何加快SQL Server 2012中的緩慢更新查詢

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM