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

OPTION(RECOMPILE)は常に高速です。なんで?

    OPTION(RECOMPILE)を使用する場合があります 理にかなっています。私の経験では、これが実行可能なオプションであるのは、動的SQLを使用している場合のみです。これがあなたの状況で理にかなっているかどうかを調べる前に、統計を再構築することをお勧めします。これは、次のコマンドを実行することで実行できます。

    EXEC sp_updatestats
    

    そして、実行計画を再作成します。これにより、実行プランが作成されたときに、最新の情報が使用されるようになります。

    OPTION(RECOMPILE)を追加する クエリが実行されるたびに実行プランを再構築します。 creates a new lookup strategyと説明されていることは聞いたことがありません。 しかし、同じことに対して異なる用語を使用しているだけかもしれません。

    ストアドプロシージャが作成されると(.NETからアドホックSQLを呼び出していると思われますが、パラメーター化されたクエリを使用している場合、これはストアドプロシージャ呼び出しになります)SQL Serverは、このクエリの最も効果的な実行プランを決定しようとしますデータベース内のデータと渡されたパラメーター(パラメータースニッフィング)に基づいて、このプランをキャッシュします。つまり、データベースに10個のレコードがあるクエリを作成し、100,000,000個のレコードがあるときにクエリを実行すると、キャッシュされた実行プランが最も効果的でなくなる可能性があります。

    要約-OPTION(RECOMPILE)という理由はわかりません ここでメリットがあります。統計と実行プランを更新するだけでよいのではないかと思います。状況によっては、統計の再構築がDBA作業の重要な部分になる場合があります。統計を更新しても問題が解決しない場合は、両方の実行計画を投稿することをお勧めします。

    そして、あなたの質問に答えるために-はい、クエリを実行するたびに実行プランを再コンパイルするのが最善の選択肢であるということは非常に珍しいことです。



    1. Where句内のIfステートメント

    2. プロアクティブなSQLServerヘルスチェック、パート1:ディスク容量

    3. SQL結合の究極のガイド:内部結合–パート1

    4. OracleのNLS_INITCAP()関数