クエリをコンパイルするとき、変数の値がどうなるかはわかりません。 OPTION (RECOMPILE)
を試すことができます .
AND
の追加は クエリ内の句 (論理的にはまったく選択的ではなくなりますが) は、オプティマイザーを誤解させて、より選択的にクエリを推定させ、必要な計画を提供する必要があります!
コメントで、 ExceptionDate = ExceptionDate
のないバージョンだと言います 88234.8
と推定されます 行と 8823.48
のバージョン
通常、使用可能な統計がない場合、SQL Server は述語の比較演算子の種類に応じてヒューリスティックにフォールバックします。
>
述語は、たとえば行の 30% を返し、 =
predicate は行の 10% を返すため、それを最初の見積もりの結果に直接適用しているように見えます。ここで等号が列自体に反するという事実を考慮していないのは興味深い!
参照統計管理のベスト プラクティス - クエリでローカル変数を使用しない>