Sql-Server

缺少索引 DMV 是否適用於索引視圖?

  • June 15, 2022

我一直在深入研究查詢儲存以查找導致 CPU 使用率高的原因,並通過查看 CPU 消耗最高的查詢的計劃,發現對一些現有索引視圖的一些潛在索引改進。

奇怪的是,在查詢我通常用來查找缺失索引的缺失索引 DMV 時,這些索引改進都沒有出現。

這可能是什麼原因?

我們將noexpand提示與索引視圖一起使用。

缺失的索引 DMV 僅允許最多 600 個條目(門檻值詳細資訊),因此某些建議可能已過期。

還有其他方法可以清除此瞬態資訊,如使用 Query Store 的建議中部分記錄的那樣:

DMV 中缺少的索引建議會被實例重新啟動、故障轉移和將數據庫設置為離線等事件清除。此外,當表的元數據發生更改時,有關該表的所有缺失索引資訊都會從這些動態管理對像中刪除。例如,當從表中添加或刪除列時,或者在表的列上創建索引時,可能會發生表元數據更改。對錶的索引執行 ALTER INDEX REBUILD 操作也會清除該表失去的索引請求。

同樣,儲存在計劃記憶體中的執行計劃會被實例重新啟動、故障轉移和將數據庫設置為離線等事件清除。由於記憶體壓力和重新編譯,執行計劃可能會從記憶體中刪除。

通過啟用查詢儲存,可以在這些事件中保留執行計劃中缺少的索引建議。

NOEXPAND對於指定了提示的索引視圖,不會生成缺少的索引建議。仍可能為同一查詢中的其他表生成索引建議。

NOEXPAND未指定時,索引視圖在優化之前擴展為基礎定義。像往常一樣,可能會在此擴展上生成缺失的索引。

優化器做出的基於成本的決策之一是將擴展計劃的(部分)匹配回(一個或多個)索引視圖。這僅在企業版和同等版本中可用。

無論版本如何,都不會為索引視圖本身提供缺少的索引建議。我不相信這個限制是專門記錄的,所以我的斷言僅基於觀察到的行為。

我強烈建議您完整閱讀第二個文件連結,尤其是關於缺失索引功能限制的部分。

您可能還對數據庫引擎優化顧問感興趣,它可以在給定工作負載作為輸入的情況下建議分區、索引視圖和這些視圖的索引。它也有其局限性,但它比機會性缺失索引功能更強大。在實施之前,所有建議都應由有能力的數據庫從業者進行驗證。

相關問答:為什麼 SQL Server 在 DMV 或查詢計劃中沒有任何缺失的索引請求?

引用自:https://dba.stackexchange.com/questions/313347