在SSMS中,我可能運行需要一段時間才能運行的查詢。如果我再次運行查詢,它幾乎可以立即完成,因此當我進行諸如添加新索引等修改時,難以看到改進。SQL Server查詢時間測試
人們如何計時查詢,以便他們能夠準確地衡量他們的變化是否實際上有所改善?
注意,我使用SQL Server 2005
在SSMS中,我可能運行需要一段時間才能運行的查詢。如果我再次運行查詢,它幾乎可以立即完成,因此當我進行諸如添加新索引等修改時,難以看到改進。SQL Server查詢時間測試
人們如何計時查詢,以便他們能夠準確地衡量他們的變化是否實際上有所改善?
注意,我使用SQL Server 2005
你應該看看查詢執行計劃 - 注意索引掃描或表掃描,你要尋找。在SSMS - >查詢 - >包含實際執行計劃。再次運行您的查詢,您將在選項卡中看到結果。
您正在看到您的結果正在優化 - 這在生產中也可能會發生。但是,您的查詢可能不得不與其他生產系統競爭,這可能會不時從緩存中刪除您的查詢結果。
http://www.sql-server-performance.com/tips/query_execution_plan_analysis_p1.aspx
在一個測試/開發服務器,與生產數據卷,您使用以下將清零執行和數據高速緩存:
CHECKPOINT
DBCC DROPCLEANBUFFERS
DBCC FREEPROCCACHE
NB。不要在生產服務器上運行此操作
這是因爲,在您第一次執行查詢後,數據將被緩存到RAM中,並且執行計劃將被緩存。因此,對於後續調用,可以更快地檢索它 - 主要是由於數據緩存,因爲從RAM獲取數據比打印磁盤要快得多。
所以,你會:
1)運行初始查詢和記錄統計
2)使查詢/指數變化
3)按照以上
4)運行查詢並記錄新的統計清除緩存
另外,僅比較改變之前/之後的執行計劃將會給出差異的指示 - 例如如果你看到一個表掃描替換爲索引查找。
進行修改如添加一個新索引會使計劃無效並導致它被重新編譯,所以我認爲這是數據頁已經在緩衝區緩存中,這真的在這裏產生了重要影響。 – 2011-05-09 21:21:39
聽起來像一個合理的假設。您可以清除緩衝區緩存 - 除非您計劃永遠不要緩存結果,否則不會推薦這麼做。 http://msdn.microsoft.com/en-us/library/ms187762.aspx – Sam 2011-05-09 21:24:55