sys.dm_db_missing_index_details (Transact-sql)

適用対象: はいSQL Server (サポートされているすべてのバージョン) はいAzure SQL データベース

空間インデックスを除く、欠落インデックスに関する詳細情報を返します。

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

列名 データ型 説明
index_handle int 特定の欠落インデックスの識別子。 識別子はサーバー全体で一意です。 index_handle は、このテーブルのキーです。
database_id smallint 欠落インデックスを含むテーブルがあるデータベースの識別子。
object_id int インデックスが欠落しているテーブルの識別子。
equality_columns nvarchar (4000) 次の形式の等値述語に使用できる列のコンマ区切り一覧。

表. 列 =constant_value
inequality_columns nvarchar (4000) 次の形式のような不等値述語に使用できる列のコンマ区切り一覧。

表. 列 > constant_value

"=" 以外の比較演算子はすべて、不等値を表します。
included_columns nvarchar (4000) クエリの包括列として必要な列のコンマ区切り一覧。 カバリング列または付加列の詳細については、「 付加列を使用したインデックスの作成」を参照してください。

メモリ最適化インデックス (ハッシュとメモリ最適化された非クラスター化) の場合は、無視 included_columns します。 すべてのメモリ最適化インデックスには、テーブルのすべての列が含まれています。
statement nvarchar (4000) インデックスが欠落しているテーブルの名前。

解説

によって返される情報は、クエリ sys.dm_db_missing_index_details がクエリオプティマイザーによって最適化され、永続化されない場合に更新されます。 欠落したインデックス情報は、データベースエンジンが再起動されるまで保持されます。 欠落インデックスの情報を、サーバーの再利用後も保持する場合は、データベース管理者が情報のバックアップ コピーを定期的に作成する必要があります。 Sys.dm_os_sys_info の列を使用して、 sqlserver_start_time データベースエンジンの最後の起動時刻を検索します。

特定の欠落インデックスが含まれている欠落インデックスグループを特定するには、 sys.dm_db_missing_index_groups その列に基づいて、動的管理ビューに対してクエリを実行し sys.dm_db_missing_index_details index_handle ます。

注意

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

CREATE INDEX ステートメントでの欠落インデックス情報の使用

によって返された情報を sys.dm_db_missing_index_details メモリ最適化インデックスとディスクベースインデックスの両方の CREATE INDEX ステートメントに変換するには、等値列を非等値列の前に配置し、それらを組み合わせてインデックスのキーを作成する必要があります。 付加列は、INCLUDE 句を使用して CREATE INDEX ステートメントに追加します。 等値の列の有効な順序を決定するには、選択度の最も高い列を左の先頭に指定し、選択度が高い順に並べます。

メモリ最適化インデックスの詳細については、「 Memory-Optimized テーブルのインデックス」を参照してください。

トランザクションの一貫性

トランザクションでテーブルを作成または削除する場合、削除されたオブジェクトに関する欠落インデックス情報を含む行は、トランザクションの一貫性を保持するためこの動的管理オブジェクトから削除されます。

アクセス許可

で SQL Server は、 VIEW SERVER STATE 権限が必要です。
SQL Database Basic、S0、S1 のサービス目標、およびエラスティックプール内のデータベースについては、 サーバー管理者 アカウントまたは Azure Active Directory 管理者 アカウントが必要です。 その他のすべての SQL Database サービスの目的で VIEW DATABASE STATE は、データベースで権限が必要になります。

参照

sys.dm_db_missing_index_columns (Transact-sql)
sys.dm_db_missing_index_groups (Transact-sql)
sys.dm_db_missing_index_group_stats (Transact-sql)
sys.dm_db_missing_index_group_stats_query (Transact-sql)
sys.dm_os_sys_info (Transact-sql)