sys.dm_db_missing_index_group_stats (Transact-SQL)

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

列名

データ型

説明

group_handle

int

欠落インデックス グループの識別子。この識別子はサーバー内で一意です。

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

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

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 で返される情報は、クエリがコンパイルまたは再コンパイルされるたびに更新されるのではなく、クエリが実行されるたびに更新されます。使用状況の統計は保存されません。統計が保持されるのは、SQL Server の再起動までです。使用状況の統計をサーバーの再利用後も保持する場合は、データベース管理者が欠落インデックスの情報のバックアップ コピーを定期的に作成する必要があります。

欠落インデックスの情報の収集を有効化および無効化する方法については、「欠落したインデックス機能について」を参照してください。

この機能の制限については、「欠落したインデックス機能の制限事項」を参照してください。

欠落インデックスの動的管理オブジェクトに関するトランザクションの一貫性については、「欠落したインデックス機能について」を参照してください。

権限

この動的管理ビューをクエリするには、VIEW SERVER STATE 権限、または VIEW SERVER 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. 特定の欠落インデックス グループについて、個別の欠落インデックスとその列の詳細を検索する

次のクエリでは、特定の欠落インデックス グループを構成しているインデックスを特定し、その列の詳細を表示します。この例では、欠落インデックス グループのハンドルを 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 句で指定します。等値の列の有効な順序を決定するには、選択度の最も高い列を左の先頭に指定し、選択度が高い順に並べます。

この動的管理オブジェクトで返される情報を使用して CREATE INDEX DDL ステートメントを記述する方法の詳細については、「欠落したインデックス情報を使用した CREATE INDEX ステートメントの記述」を参照してください。