2008-09-24 72 views

回答

38

Cost Based Query Optimisation是一種使用直方圖和行計數來啓發式地估計執行查詢計劃的成本的技術。當您向SQL Server提交查詢時,它會對其進行評估並生成一系列Query Plans,它使用啓發式來估計成本。然後它選擇最便宜的查詢計劃。

查詢優化器使用統計信息來計算查詢計劃的成本。如果統計信息丟失或過期,則沒有正確的數據來估計計劃。在這種情況下,它可以生成適度或非常不理想的查詢計劃。

SQL Server將(在大多數情況下)自動生成大多數表和索引的統計信息,但您可以補充這些或強制刷新。查詢調整嚮導大概會在查詢中發現一些缺少的統計信息或已標識的聯接,以便添加統計信息。

+0

最後一段在技術上的確如此正確:SQL Server不會自動創建一個持久索引(即`CREATE INDEX`),但它可以在「索引假脫機」中緩存一些數據,但這些數據不會在不同的查詢執行之間共享。查看此QA:http://dba.stackexchange.com/questions/43772/why-dont-databases-create-their-own-indexes-automatically – Dai 2016-04-27 22:33:44

3

簡而言之,它使您的數據庫準備就緒,可以有效地工作。通過準備好的統計數據,您的數據庫知道(在需要確定執行計劃之前)什麼可能是最有效的路線。

2

基本上只是保持SQL更新與你有什麼類型的索引,行數等。這有助於SQL更好地估計如何執行您的查詢。保持統計數據更新是一件好事。

2

從BOL ...

創建在 提供的列的直方圖和相關聯的 密度組(集合),或設定 表或索引視圖的列。字符串彙總 統計信息也創建在 上構建在char,varchar, varchar(max),nchar,nvarchar, nvarchar(max),text和ntext 列上的統計信息。查詢優化器使用這個統計信息來選擇 用於檢索的最有效計劃或更新數據的 。最新的統計數據 允許優化器準確地 評估不同查詢計劃的成本,並選擇一個高質量的計劃。

8

優化程序使用統計信息來確定是否爲查詢使用特定索引。如果沒有統計信息,優化程序無法知道有多少行可以匹配給定的條件,導致它必須針對「多行」情況進行優化,這可能不夠理想。

相關問題