sys.dm_db_missing_index_group_stats (Transact-SQL)

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

空間インデックスを除く、欠落インデックス グループに関する概要を返します。

Azure SQL Database では、動的管理ビューでは、データベースの包含に影響を与える情報を公開したり、ユーザーがアクセスできる他のデータベースに関する情報を公開したりすることはできません。 この情報が公開されないように、接続されているテナントに属していないデータを含む行はすべて除外されます。

列名 データ型 説明
group_handle int 欠落インデックス グループの識別子。 この識別子はサーバー内で一意です。

他の列では、グループ内のインデックスが欠落していると考えられる、すべてのクエリに関する情報が提供されます。

インデックス グループには、インデックスが 1 つだけ含まれます。

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 クエリなど) によって発生したシーク数。 詳細については、「 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_infosqlserver_start_time を使用します。

注意

この DMV の結果セットは 600 行に制限されています。 各行には、不足しているインデックスが 1 つ含まれています。 不足しているインデックスが 600 個を超える場合は、新しいインデックスを表示できるように、既存の不足しているインデックスに対処する必要があります。

1 つの不足しているインデックス グループには、同じインデックスを必要とするクエリがいくつか存在する場合があります。 この 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 句で指定します。 等値の列の有効な順序を決定するには、選択度の最も高い列を左の先頭に指定し、選択度が高い順に並べます。 不足しているインデックス候補を適用する方法について説明します。

次のステップ

不足しているインデックス機能の詳細については、次の記事を参照してください。