2014-10-04 127 views
0

我在SSMS中運行了三個查詢,無法理解它們每個運行所需的時間差異。前兩個查詢提取一個月的數據,第三個提取兩個月的數據。所有查詢都能正常工作,但我無法理解第二個問題可能需要很長時間才能運行。 查詢,返回的記錄數和每個查詢所用的時間如下: 任何人都可以解釋這一點嗎?SQL Server中查詢執行時間不一致

SELECT * 
    FROM [vw_Movement] 
    WHERE ShiftDateTime BETWEEN '1 Aug 14 6:00' AND '31 Aug 14 18:00' 
(Rcds returned=16,342, time=0 secs) 



SELECT * 
    FROM [vw_Movement] 
    WHERE ShiftDateTime BETWEEN '1 Sep 14 6:00' AND '30 Sep 14 18:00' 
(Rcds returned=14,468, time=24 secs) 



SELECT * 
    FROM [vw_Movement] 
    WHERE ShiftDateTime BETWEEN '1 Aug 14 6:00' AND '30 Sep 14 18:00' 
(Rcds returned=30,810, time=0 secs) 
+0

嘗試重新啓動SQL Server進程並再次運行查詢 - 查詢時間仍然不合理?如果重新啓動 - 多次查詢,平均時間仍然不合理?您可能在第一個和第三個查詢中已經命中緩存 – 2014-10-04 00:51:49

+0

這些查詢是否一致地執行?如果不是,請多次運行這些查詢並對結果取平均值。 – md4 2014-10-04 02:19:36

+1

@SergeyVolegov:我希望它不是一個生產服務器。 – 2014-10-04 07:45:22

回答

0

你看過執行計劃(SSLS中的CTL-L)嗎?您不會說底層數據是否在視圖或表格中,而是來自vw_前綴,我將繼續觀看。

因此,您可能還想嘗試查看視圖定義本身,將其作爲新查詢複製到SSMS中,將WHERE語句放在最後,並分析整個查詢而不是視圖。也許通過評論一些聯合可以縮小問題的範圍。

0

它可能關係到

(1)統計 - 您可以在維護窗口中更新thatview基礎表的統計信息。人們警告在正常工作時間運行更新統計信息,我認爲這取決於您的工作量。更新統計信息並不鎖定我的經驗表應該沒問題,但它確實取決於數據庫服務器/主機可以處理多少。

(2)錯誤的查詢計劃緩存在過程緩存中。如果你搜索互聯網,你可以找到特定的緩存查詢計劃的方法。壞計劃也與糟糕的舊統計有關。

僅供參考 - 通過更新統計數據,您將自動查詢由於統計數據的變化而重新編譯。不需要採取(2)的措施。