現象
次のような状況で問題が発生します。
-
Microsoft SQL Server 2016 では、互換性レベルが 130 に設定されているデータベースを使用します。
-
列ストア インデックスと行ストア インデックスまたはヒープにアクセスし、フィルター述語 (WHERE 句) を含むクエリを実行します。
このシナリオでは、SQL Serverは、フィルター述語をデータ ソース演算子 (テーブルまたはインデックス スキャンまたはシーク) に近づけることはできません。 これにより、最適でないクエリ パフォーマンスが発生する可能性があります。
さらに、クエリがフィルター処理されたデータに依存する式 (型変換など) を使用する場合 (たとえば、char テーブル列は int に変換されますが、値のサブセットにのみ有効な int 表現が含まれ、このサブセットはフィルター述語によって識別されます)、クエリは次のいずれかのデータ変換エラーで失敗する可能性があります。
メッセージ 245、レベル 16、状態 1、20
行目 varchar 値 '0.5' をデータ型 int に変換するときに変換に失敗しました。
メッセージ 8114、レベル 16、状態 5、行 34
データ型 varchar を bigint に変換中にエラーが発生しました。
解決方法
この問題は、SQL Server:
SQL Server 2016 SP1 の累積的な更新プログラム 2 の次の累積的な更新プログラムで修正されています
注 この修正プログラムを有効にするには、クエリ オプティマイザー修正プログラムを有効にする必要があります。
クエリ オプティマイザー修正プログラムを有効にするには、トレース フラグ 4199、データベース スコープ構成設定 QUERY_OPTIMIZER_HOTFIXES=ON (SQL Server 2016 以降で利用可能)、USE_HINT またはクエリ オプション 'ENABLE_QUERY_OPTIMIZER_HOTFIXES' (SQL Server 2016 SP1 以降で使用可能) のいずれかを使用します。
SQL Serverの各新しい累積的な更新プログラムには、すべての修正プログラムと、以前の累積的な更新プログラムに含まれていたすべてのセキュリティ修正プログラムが含まれています。 SQL Serverの最新の累積的な更新プログラムを確認する:
SQL Server 2016 の最新の累積的な更新プログラム
状態
マイクロソフトでは、この問題をこの資料の対象製品として記載されているマイクロソフト製品の問題として認識しています。
関連情報
Microsoft がソフトウェア更新プログラムの説明に使用する 用語について説明します。