現象
単一列と複数列の統計の両方で対象となる列で結合または集計を含むクエリを実行するとします (この列は先頭の列ではない)。 SQL Server 2016 で既定のカーディナリティ推定器 (CE) を使用している場合、個別の行数が過小評価される可能性があります。 これにより、クエリ実行プランが最適とは言えません (たとえば、見積もりが低いと、ハッシュ演算子に対するメモリ許可が不十分になり、クエリが tempdb にスピルする可能性があります)。
状態
Microsoft は、これが "適用対象" セクションに記載されている Microsoft 製品の問題であることを確認しました。
解決策
この問題は、SQL Server 用の次の累積的な更新プログラムで解決されています。
注釈 この修正プログラムを有効にするには、トレース フラグ (TF) 4199、または対応するデータベース スコープの構成またはクエリ ヒント オプションを使用してクエリ オプティマイザ修正プログラムを有効にする必要があります。
SQL Server の累積的な更新プログラムについて:
SQL Server 用の新しい累積的な更新プログラムには、以前の累積的な更新プログラムに含まれていたすべての修正プログラムとすべてのセキュリティ修正プログラムが含まれています。 SQL Server の最新の累積的な更新プログラムを確認してください。
回避策
この問題は、次のクエリ ヒントを追加することで修正できます。
USE HINT('FORCE_LEGACY_CARDINALITY_ESTIMATION')
参考資料
マイクロソフトでソフトウェア更新プログラムの説明に使用する用語集を参照してください。