2011-08-22 58 views
2

可能重複:
How does SQL server work out the estimated number of rows?SQL:行差的實際人數

我只是希望通過SQL服務器的圖形化執行計劃,我遇到了以下兩個信息:

  1. 實際排數 - 2385
  2. 估計的行數-180

我想知道爲什麼會出現這種差異。你能解釋一下他們之間的區別嗎?如果你可以用一些例子來解釋它會很有幫助。

謝謝。

+2

發佈您的查詢將是相當有幫助 –

+0

我可以,但它是一個非常長的查詢:( –

+2

http://stackoverflow.com/questions/1476723/how-does-sql-server-work-out-the-估計數 - 的 - 行 –

回答

6

行估計是基於統計。不準確的估計可能來自幾個因素:

  • 低基數的數據或統計
  • 已過期或不完整的統計資料
  • 低效的執行計劃
  • 併發問題(在數據從創建的變化執行計劃執行時間)

作爲一項規則,不要擔心,直到你有問題。

我我的經驗,最經常根據您的統計基數。

如果是基於兩個字段,這兩個具有索引選擇,行估計將基於該值的可能性在各自索引的產品,倍的行的總數。

+0

+1。除非他們成爲問題,否則你不需要擔心事情的出色建議至關重要。如果你在正確的數據維護上添加了一些細節(我個人想知道更多),這將是一個完美的答案 –

+0

@michael - 該部分不是太複雜 - 確保AUTO UPDATE STATISTICS和AUTO CREATE STATISTICS是如果你有一個非常繁忙的桌子,在維護期間用'FULLSCAN'手動更新是很好的。 – JNK

2

我不知道SQL Server的太多了,所以這是一個受過教育的猜測:還有就是統計數據之間的差異保持對錶和實際數據在表中。

數據庫保留有關表的統計數據,優化程序可以使用這些數據來爲要執行的SQL查找最佳(最便宜)的查詢計劃。這些統計數據包括例如行的總數和跨列的數據分佈(例如,字段'性別'包含60%值'm'和40%值'f')。你的很可能這裏看到的是,統計數據已經過時,優化器完成,因此inacurate計算:優化假設結果包含180行,在現實中雖然(在執行查詢時)返回2385嘗試更新統計(不知道SQL服務器中的確切語法),看看是否改變了數字。

+0

你可以與一些例子來解釋它可以是不同的 –

+0

@Rocky如果你有狀態已過時的 - 即最後一次計算的,當你有幾行,但現在有很多rows--這可能發生。您可以設置統計信息以自動重新計算(儘管我不確定實際情況如何),也可以創建一個按計劃重新計算它的維護計劃(我通常會這麼做)。 –

+0

@Rocky:我重複了一下我的解釋,現在我希望它更清楚。 –