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_info の sqlserver_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 句で指定します。 等値の列の有効な順序を決定するには、選択度の最も高い列を左の先頭に指定し、選択度が高い順に並べます。 不足しているインデックス候補を適用する方法について説明します。
次のステップ
不足しているインデックス機能の詳細については、次の記事を参照してください。
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示