sql >> データベース >  >> RDS >> Sqlserver

このクエリが適切なインデックスを使用しないのはなぜですか?

    クエリをコンパイルするとき、変数の値がどうなるかはわかりません。 OPTION (RECOMPILE) を試すことができます .

    AND の追加は クエリ内の句 (論理的にはまったく選択的ではなくなりますが) は、オプティマイザーを誤解させて、より選択的にクエリを推定させ、必要な計画を提供する必要があります!

    コメントで、 ExceptionDate = ExceptionDate のないバージョンだと言います 88234.8 と推定されます 行と 8823.48 のバージョン

    通常、使用可能な統計がない場合、SQL Server は述語の比較演算子の種類に応じてヒューリスティックにフォールバックします。

    > 述語は、たとえば行の 30% を返し、 = predicate は行の 10% を返すため、それを最初の見積もりの​​結果に直接適用しているように見えます。ここで等号が列自体に反するという事実を考慮していないのは興味深い!

    参照統計管理のベスト プラクティス - クエリでローカル変数を使用しない



    1. MySQL UDF sys_exec()が機能しない

    2. 制約で許可されている値のリストに対するPostgreSQLクエリ?

    3. PHP-mysqlに日付を挿入します

    4. SQL ServerでのDEGREES()の例