2011-08-18 55 views
2

我想增加我的請求性能之一。 我的要求是由10個不同的選擇。執行計劃中的「查詢成本」是如何工作的?

實際生產查詢需要36秒才能執行。

如果我顯示執行計劃,對於一個select,我的查詢成本爲18%。

因此,我使用xml查詢(http://www.codeproject.com/KB/database/InClauseAndSQLServer.aspx)更改了in子句(在此選擇中)。

新的查詢現在需要28秒才能執行,但sql服務器告訴我,上面的select具有100%的查詢成本。這是我所做的唯一改變。任何查詢都沒有並行性。

生產: 36秒,我的選擇是18%(其他是10%)。

新版本: 28秒,我的選擇是100%(其他都是0%)。

你知道sql server如何計算這個「查詢成本」嗎? (我開始相信它是隨機的或類似的東西)。

+0

不是隨意的,當然;這只是你的理解,缺乏。 – duffymo

+0

謝謝你這個真正有趣的答案,你介意提高我的知識,這是我的問題的目的。 –

+0

[您可能會在我的答案中找到鏈接,這裏有用](http://stackoverflow.com/q/8688865/73226) –

回答

3

查詢成本是CPU週期,內存和磁盤IO組合的無單位量度。

很多時候,您會看到運營商或計劃的成本更高但執行時間更快。

主要是由於上述三個組件的速度不同。 CPU和內存相當快,而且也是不常見的瓶頸。如果您可以將磁盤IO子系統的某些壓力轉移到CPU,則查詢可能會顯示較高的成本,但應該快得多。

如果你想獲得您的特定查詢的執行更詳細的信息,您可以使用:關於CPU週期,計劃創建

SET STATISTICS IO ON 
SET STATISTICS TIME ON 

這將輸出的詳細信息和頁面讀取(無論是從磁盤和內存)到消息選項卡。

+0

有什麼方法可以查看成本的詳細信息嗎?有沒有辦法看到每個選擇的執行時間?這個成本如何相關?這一切的目的是爲了提高執行時間嗎? –

+0

時間並不總是最重要的因素,尤其是在共享倉庫場景中。要查看詳細信息,可以使用我在答案中提到的統計選項。 – JNK