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

クエリで変数を使用すると、異なるクエリプランが生成されます

    AUTO-PARAMETERIZATION をオフにして FIXED 値を使用すると、クエリ プランはクエリを実行する必要がある値を正確に認識できるためです。そのため、計画はこれらの値に合わせて特別に調整されています。

    ただし、変数を使用する場合、クエリ キャッシュに配置されるプランは、パラメーター化された変数を含むプランです。これは、任意の変数に置き換えることができ、同じプランを再利用します。したがって、これらの計画は、「最良の平均ケース」を処理するために、より堅牢で一般的なものにする必要があります.

    参照:

    編集 - パフォーマンスについて

    パフォーマンスに関しては、オプティマイザが間違っている可能性があります - この場合、統計 for the exact values を調べました インデックスは役に立たない (転換点の問題である可能性がある) と感じたため、代わりにクラスター化されたスキャンを計画しています。クエリ プランを強制するかどうかは微妙な問題ですが、明らかにインデックスを使用した方が 50% 高速です

    <オール>
  1. 特定のハードウェア
  2. 特定の時点のデータ配信
  3. 与えられた特定の値
  4. 非常に正当な理由がない限り、クエリ オプティマイザー (インデックス ヒントを使用するなど) を悪用することはありませんが、常に高速になることを証明するデータがたくさんある場合を除きます。




    1. ORA-00604:再帰SQLレベル1でエラーが発生しました

    2. SQLiteでのDate()関数のしくみ

    3. MySQLで複数の行をマージする方法は?

    4. 整数列のデフォルト値を設定するSQLite