它看起來像查詢立即執行 這可能是查詢計劃允許開始快速返回行。
例如,如果您執行SELECT * FROM a_large_table
,您將立即看到一些行,但檢索整個結果集需要一些時間。 Mgmt Studio報告的實際執行時間是多少(查詢完成後顯示在狀態欄中)?
如果要在不向客戶端檢索數據的情況下測試查詢性能,可以執行SELECT INTO #temp_table
。這將需要一些額外的I/O,但仍會給你一個相當好的執行時間估計。
UPD。
你也可以運行諸如SELECT COUNT(*) FROM (<your query here>)
或SELECT SUM(<some field>) FROM (<your query here>)
之類的東西 - 運氣好的話,它會使服務器執行查詢並聚合結果,基本上做同樣的工作再加上一點額外的東西。但以這種方式扭曲結果是非常容易的 - 查詢優化器很聰明,並且需要非常小心以確保測量您想要測量的結果(因爲使用不同的執行計劃來測量查詢根本沒有意義)。
我建議你再考慮一下你想測量什麼以及爲什麼。在任何真實場景中,對「純」查詢持續時間不感興趣 - 因爲您永遠不想丟棄查詢結果(結果就是您爲什麼首先需要查詢,對吧?)。因此,您需要將結果返回給客戶端,或者將其存儲在某個地方,或者將其與另一個表等結合起來 - 通常您需要測量查詢執行情況,包括處理結果的時間。
最後一個通知。如果你希望你能以某種方式迫使服務器在1秒內執行這個查詢,因爲你認爲服務器在其他13秒內什麼都不做,你錯了。就像他們說的那樣,SELECT沒有被破壞。
有什麼可以幫助查詢優化 - 對於單個查詢分析器不會幫你太多。分析查詢計劃,調整您的表結構,嘗試重寫查詢,如果遇到麻煩,請在SO上發佈另一個問題。
管理工具報告查詢花了14秒,但正如我所說我可以立即滾動reults視圖。有沒有其他方法可以測試這個,而不寫入臨時表? – 2010-11-19 18:11:23
這絕對意味着整個查詢需要14秒,但您看到的行會更快地返回。如果不查看查詢計劃和數據,很難詳細解釋這一點,但這種行爲絕不意外。 – VladV 2010-11-20 21:10:57
爲避免混淆「SELECT INTO」或向查詢添加假集合,SSMS中有一個選項「執行後放棄結果」 – 2010-11-20 21:35:09