2015-05-19 116 views
1

我知道更少的成本更快的查詢。但最近我遇到了成本應該始終低於100的說法。真的嗎 ?應該計劃成本小於100?

根據我的理解,成本與(IO操作/ CPU使用率/使用的網絡資源)成比例。這意味着當我說成本很高時,這三種操作中的任何一種/所有這些操作,即IO操作/ CPU使用率/網絡資源使用率可能很高。那是對的嗎 ?

+6

沒有這種說法是完整的,完全廢話!對於同一查詢,比較一個計劃和另一個計劃的成本只有意義。對於返回巨大結果集的某個查詢,10,000,000的成本可能是完全可以接受的。 –

+0

謝謝託尼。 Ismy對Cost的理解是否正確? – emilly

+0

同樣如您所說「成本只有在比較一個計劃與另一個計劃對於同一個查詢時纔有意義」,這意味着以千計成本沒有任何問題。這意味着如果可能,我們應該儘量降低它? – emilly

回答

3

成本應該是準確的。除非我們正在討論從10053追蹤中檢查同一查詢的不同計劃,否則更擔心精度而不是成本是低還是高。

如果您有一個查詢觸及數百萬行並執行一堆聚合,則成本爲10的計劃可能效率非常低。從邏輯上講,您知道查詢將非常昂貴。如果優化器認爲查詢非常便宜,則幾乎可以保證您的統計數據不準確。如果您的統計數據不準確,那意味着優化器將選擇一個效率低於應該的計劃。就個人而言,如果我發現需要關注的更多查詢,我不會感到驚訝,因爲注意到成本太低,而不是注意到成本太高。

選擇任何類型的成本截止是荒謬的。如果您知道每個查詢都將成爲獲取幾十行的OLTP應用程序的一部分,那麼再次查看計劃中的成本可能在千元以上,以查看優化程序是否選擇了一個錯誤的計劃的無效統計信息。但是很少有系統只有這種特定類型的OLTP查詢 - 大多數系統都會丟失非常便宜的查詢,這些查詢會返回一行或兩行以及更昂貴的查詢,從而讀取和聚合大量的行。創建任何類型的上限往往會導致開發人員做一些愚蠢的事情 - 將「便宜」查詢放入循環中而不是編寫「昂貴」的連接可能意味着您的所有查詢都具有低成本,但是整個系統的運行效率遠低於它可以。

+0

謝謝賈斯汀。你說過「一項成本爲10的計劃可能效率很低」這是否意味着計劃效率取決於其他參數與成本之間的差距? – emilly

+0

你也說過「如果優化器認爲查詢非常便宜,那幾乎可以保證你的統計數據不準確」我不確定統計數據在這裏是什麼意思? – emilly