簡體   English   中英

簡單更新查詢的不同性能

[英]Different performance for simple update query

我在兩個不同的機器(開發者機器和測試器機器)上還原了一個數據庫,盡管它們並不相同,但它們具有相似的性能。

使用以下查詢(混淆):

 CREATE TABLE #TmpTable (MapID int, Primary key(MapID))

 UPDATE MapTable
    SET Tstamp = GetDate() 
   FROM MapTable    
        JOIN Territory as Territory ON Territory.ID = MapTable.TerritoryID
        LEFT JOIN #TmpTable ON #TmpTable.MapID = MapTable.MapID  
  WHERE MapTable.TStamp > DateAdd(year, -100, GETDATE())    
    AND Territory.Name IS NOT null    
    AND Territory.Name NOT LIKE '!%'   
    AND #TmpTable.MapID IS NULL

對於400k條記錄,開發人員計算機在約4秒內更新,但在測試儀計算機上,它在約25秒內更新; 兩台計算機上都還原了相同的數據庫。

問題是,通過我們使用的工具運行此命令時,查詢超時設置為30秒,並且在測試機上的超時時間超過90+ %

但是兩者的執行計划是相同的...

誰能說出為什么會這樣,並可能進行優化?

我可以看到“可能”對性能產生影響的一件事是使用了GETDATE()函數,該函數可能為每條記錄調用兩次,但肯定會被調用一次,因此該函數需要400K調用!

我會將GETDATE()的結果放入變量中並使用它,除非有充分的理由不這樣做,否則我將始終這樣做,例如,像在CURSOR中進行批處理一樣,需要更改整個查詢中的日期。

但是,我懷疑這將是性能的主要問題。 由於執行計划相同的不同機器之間的執行時間差異如此之大,我將研究SQL外部的因素,例如CPU使用率,HDD使用率,速度和碎片等等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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