分享方式:


sys.dm_db_missing_index_group_stats (Transact-SQL)

適用於:SQL ServerAzure SQL 資料庫 Azure SQL 受控執行個體

傳回遺漏索引群組的摘要資訊,不包括空間索引。

在 Azure SQL Database 中,動態管理檢視不可以公開可能會影響資料庫內含項目的資訊,或公開有關使用者可存取之其他資料庫的資訊。 為了避免公開此資訊,系統會篩選出包含不屬於連線租用戶之資料的每個資料列。

資料行名稱 資料類型 描述
group_handle int 識別遺漏索引的群組。 此標識碼在伺服器中是唯一的。

其他數據行會提供群組中索引視為遺漏之所有查詢的相關信息。

索引群組只包含一個索引。

可以在 sys.dm_db_missing_index_groups加入 index_group_handle
unique_compiles bigint 可受益於這個遺漏索引群組的編譯和重新編譯數目。 許多不同查詢的編譯和重新編譯可能會對這個數據行值造成貢獻。
user_seeks bigint 使用者查詢導致群組中建議索引可能已用於的搜尋次數。
user_scans bigint 用戶查詢可能已用於群組中建議索引的掃描數目。
last_user_seek datetime 上次搜尋的日期和時間,由用戶查詢所造成,群組中建議的索引可能已用於。
last_user_scan datetime 用戶查詢群組中建議索引可能已用於的最後一次掃描日期和時間。
avg_total_user_cost float 用戶查詢的平均成本,可由群組中的索引降低。
avg_user_impact float 實作此遺漏索引群組時,用戶查詢可能會遇到的平均百分比優勢。 值表示如果實作這個遺漏索引群組,查詢成本會平均下降這個百分比。
system_seeks bigint 系統查詢所造成的搜尋數目,例如自動統計數據查詢,群組中建議的索引可能已用於。 如需詳細資訊,請參閱 Auto Stats 事件類別
system_scans bigint 由系統查詢導致群組中建議索引可能已用於的掃描數目。
last_system_seek datetime 上次系統搜尋的日期和時間,由系統查詢所造成,群組中建議的索引可能已用於。
last_system_scan datetime 最後一次系統掃描的日期和時間,因為系統查詢中建議的索引可能已用於群組中。
avg_total_system_cost float 系統查詢的平均成本,可由群組中的索引降低。
avg_system_impact float 如果實作這個遺漏的索引群組,系統查詢可能會遇到的平均百分比優勢。 值表示如果實作這個遺漏索引群組,查詢成本會平均下降這個百分比。

備註

sys.dm_db_missing_index_group_stats 回的資訊會由每個查詢執行更新,而不是由每個查詢編譯或重新編譯所傳回。 使用量統計數據不會保存,而且只會在資料庫引擎重新啟動之前保留。 如果資料庫管理員想要在伺服器回收之後保留使用量統計數據,則應該定期製作遺漏索引資訊的備份複本。 使用 sys.dm_os_sys_info 中的 sqlserver_start_time 資料行,來尋找最近一次資料庫引擎啟動時間。

注意

此 DMV 的結果集限制為 600 個資料列。 每個數據列都包含一個遺漏的索引。 如果您有超過 600 個遺漏的索引,您應該解決現有的遺漏索引,以便您接著檢視較新的索引。

遺漏的索引群組可能有數個需要相同索引的查詢。 如需此 DMV 中需要特定索引之個別查詢的詳細資訊,請參閱 sys.dm_db_missing_index_group_stats_query

權限

若要查詢此動態管理檢視,用戶必須獲得 VIEW SERVER STATE 許可權或任何暗示 VIEW SERVER STATE 許可權的許可權。

SQL Server 2022 和更新版本的權限

需要伺服器上的 VIEW SERVER PERFORMANCE STATE 權限。

範例

下列範例說明如何使用 sys.dm_db_missing_index_group_stats 動態管理檢視。 深入瞭解在具有遺漏索引建議的微調非叢集索引中使用 遺漏索引的指引。

A. 尋找10個遺漏的索引,並找出使用者查詢預期最高的改善

下列查詢會決定哪些 10 個遺漏的索引會產生用戶查詢的最高預期累積改善,依遞減順序。

SELECT TOP 10 *  
FROM sys.dm_db_missing_index_group_stats  
ORDER BY avg_total_user_cost * avg_user_impact * (user_seeks + user_scans)DESC;  

B. 尋找特定遺漏索引群組的個別遺漏索引及其數據行詳細數據

下列查詢會決定哪些遺漏索引組成特定的遺漏索引群組,並顯示其數據行詳細數據。 為了這個範例,遺漏的索引 group_handle 是 24。

SELECT migs.group_handle, mid.*  
FROM sys.dm_db_missing_index_group_stats AS migs  
INNER JOIN sys.dm_db_missing_index_groups AS mig  
    ON (migs.group_handle = mig.index_group_handle)  
INNER JOIN sys.dm_db_missing_index_details AS mid  
    ON (mig.index_handle = mid.index_handle)  
WHERE migs.group_handle = 24;  

此查詢提供遺漏索引的資料庫、架構和數據表名稱。 它也會提供應該用於索引鍵的數據行名稱。 撰寫 CREATE INDEX DDL 語句以實作遺漏索引時,請先列出相等數據行,然後在 CREATE INDEX 語句的 ON <table_name> 子句中列出等號數據行。 包含的數據行應該列在 CREATE INDEX 語句的 INCLUDE 子句中。 若要判斷相等數據行的有效順序,請根據選取性排序它們,先列出最選擇性的數據行(數據行清單中的最左邊)。 瞭解如何 套用遺漏的索引建議。

下一步

在下列文章中深入瞭解遺漏的索引功能: