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 子句中。 若要判斷相等數據行的有效順序,請根據選取性排序它們,先列出最選擇性的數據行(數據行清單中的最左邊)。 瞭解如何 套用遺漏的索引建議。
下一步
在下列文章中深入瞭解遺漏的索引功能: