概要
Microsoft SQL Server 2016 の一部のクエリ実行プランには、テーブルまたはインデックス スキャン/範囲操作でフィルターを評価するパターンが含まれます。 フィルター述語の一部がインデックス キーと一致する場合があるため、インデックス シークまたは範囲スキャンの実行に使用される場合があります。 述語の残りの部分は「残差」と呼ばれ、スキャンまたは範囲操作によって出力される各行について評価する必要があります。 これは、フィルター演算子に対応します。 ただし、パフォーマンスを向上させるために、SQL Server はこのようなフィルターをテーブル アクセス演算子自体にプッシュできます。
この方法により全体的なパフォーマンスが向上しますが、一部の条件下 (パラメーターの感度に関連する不正確なカーディナリティ推定の場合など) では、スキャン ダウン フィルターが予期したよりも多くの行を処理する可能性があります。 この動作は、実際の実行プランを使用している場合、クエリ パフォーマンスのトラブルシューティング中に非表示になる可能性があります。これは、返される行数が、テーブルまたはインデックスからスキャンされた実際の行数ではなく、残留述語が適用された後の行数に対応しているためです。
更新情報
「現象」セクションで説明されているシナリオの診断を向上させるために、SQL Server 2016 Service Pack 1 (SP1) では、新しいプラン表示 XML 属性である推定行読み取り数が導入されています。 この属性は、残留述語が適用される前に演算子が読み取る行の推定数を提供します。 この更新プログラムは、KB 3107397 を補完するものです。
この機能は、SQL Server 2016 Service Pack 1 に含まれています。
SQL Server 2016 のビルドについて
SQL Server 2016 の新しいビルドには、以前のビルドに含まれていたすべての修正プログラムとすべてのセキュリティ修正プログラムが含まれています。 SQL Server 2016 の最新ビルドをインストールすることをお勧めします。
参考資料
マイクロソフトでソフトウェア更新プログラムの説明に使用する用語集を参照してください。