現象
Microsoft SQL Server 2014 を使用していることを前提としています。 SQL Server 2014 リリースノートに含まれている次の2つの問題が発生する可能性があります。
-
不足しているインデックスの詳細メモリ最適化テーブルの問題 を報告するための列が、メモリ最適化テーブルのクエリに含まれているインデックスが見つからない場合、SQL Server 2014 では、SHOWPLAN_XML で欠落しているインデックスと、sys.dm_db_missing_index_details などの欠落しているインデックスの dmv が報告されます。 場合によっては、欠落しているインデックスの詳細に含まれる列が含まれていることがあります。 メモリ最適化テーブルのすべてのインデックスにすべての列が暗黙的に含まれているため、メモリ最適化インデックスを使用して、含まれる列を明示的に指定することはできません。
-
インデックスの詳細が表示されない場合ハッシュインデックスが存在し、クエリの問題には適さない場合: クエリで参照されているメモリ最適化テーブルの列にハッシュインデックスを持っているが、クエリに対してインデックスを使用できない場合、SQL Server 2014 は SHOWPLAN_XML と DMV sys.dm_db_missing_index_details で欠落しているインデックスを報告しないことになります。特に、インデックスキー列のサブセットを含む等号述語がクエリに含まれている場合、またはインデックスキー列を含む不等述語が含まれている場合は、ハッシュインデックスをその代わりとして使うことはできません。また、クエリを効率的に実行するために別のインデックスが必要になります。
原因
この問題は、クエリオプティマイザーで欠落しているインデックスロジックが、ディスクベースのテーブルの従来の非クラスター化インデックスと、メモリ最適化テーブルの新しいインデックス型を区別しないために発生します。
解決方法
この問題は、SQL Server の次の累積的な更新プログラムで最初に修正されました。
SQL Server 2014 の累積更新プログラム1 /en-us/help/2931693
SQL Server 用の新しい累積更新プログラムには、以前の累積的な更新プログラムに含まれていたすべての修正プログラムとすべてのセキュリティ修正が含まれています。 SQL Server の最新の累積的な更新プログラムを確認します。
回避策
この問題を回避するには、次の回避策を使用します。
-
問題の回避策: 不足しているインデックスの詳細について、メモリ最適化テーブルの追加された列を報告しない。メモリ最適化テーブルのインデックスを含む INCLUDE 句を指定しないでください。
-
問題の回避策: インデックスの詳細が表示されない場合、ハッシュインデックスが存在しているが、クエリに適していない場合は、クエリとクエリプランを検査して、クエリがインデックスキーのサブセット上のインデックスシーク操作によって得られるか、または不等号述語のインデックスシーク操作から判断できるかを調べます。 インデックスキーの一部を検索する必要がある場合は、非クラスター化インデックスを使うか、またはシークする必要がある列だけでハッシュインデックスを使用します。 不等号述語をシークする必要がある場合は、HASH の代わりに非クラスター化インデックスを使います。
注: 回避策は、 SQL Server 2014 のリリースノートに記載されています。
状態
マイクロソフトでは、この問題をこの資料の対象製品として記載されているマイクロソフト製品の問題として認識しています。