2009-07-28 75 views
7

在DMV sys.dm_db_missing_index_group_stats,有一個名爲avg_user_impact場。每BOL,這顯示SQL服務器avg_user_impact

如果實現此缺少的索引組,用戶查詢可能遇到的平均百分比收益。這個值意味着如果實現了這個缺失的索引組,查詢成本平均下降了這個百分比。

當我運行一個查詢來尋找丟失的索引,將有對性能的影響最大,我看到幾個聲稱的avg_user_impact將在數千人。

我建立的這些建議一個索引,並根據DMV sys.dm_db_index_usage_stats這是從來沒有使用過。一旦我禁用索引,它就會立即再次顯示爲缺失索引。

是否有可能,一旦avg_user_impact字段顯示超過100個,這是錯誤的?或者,這是一個如何推薦的指數仍然需要進行有用性測試的例子嗎?我在做什麼錯誤或誤解?

回答

7

推薦索引和用戶的影響是從成本的優化都估計,而且,你看有沒有保證,他們總是正確的。我認爲用戶影響列可以通過設計超過100(儘管我們不得不希望SQL Server團隊的MS開發人員在這裏回答真正的問題)。測試是否創建索引中顯示的索引至關重要DMV將工作與否。我在那裏顯示索引時也有相同的經驗,但是一旦創建實際上並未得到使用,可能是由於查詢的細節或表中的數據分佈等。視圖在大多數情況下都是正確的,特別是對於簡單情況,但並非總是如此。

同時,應注意有關創建真正的寬索引,因爲他們可能會傷害插入/更新性能超過他們幫助選擇性能,這取決於服務器的繁忙程度。

+2

的另一件事 - 這裏有一個真正聰明的查詢對建議的索引相關查詢計劃:http://social.msdn.microsoft.com/Forums/en-US/sqldatabaseengine/thread/71814032-cd8d-4802-80de -7fb2bee80f41 另請參見: http://sqlblog.com/blogs/jonathan_kehayias/archive/2009/07/27/digging-into-the-sql-plan-cache-finding-missing-indexes.aspx – onupdatecascade 2009-07-30 17:38:41

0

表的統計信息也必須更新,以確保SQL引擎使用新創建的索引。

創建索引後RUN

USE AdventureWorks2012; GO EXEC sp_updatestats; GO

更新STATISTICS命令將確保所有緩存的SQL計劃失效,並使用新創建的索引構建新的SQL執行計劃。

+0

嗨,Mayank。您的陳述可能不完全正確。這裏是另一個應該幫助的stackoverflow文章:http://stackoverflow.com/questions/1930726/are-statistics-automatically-updated-when-a-new-index-is-created – Oliver 2014-08-22 17:07:59