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

#temp テーブルと同様にサブクエリを強制的に実行するにはどうすればよいですか?

    この動作が見られる理由については、いくつかの説明が考えられます。いくつかの一般的なものは

    <オール>
  1. サブクエリまたは CTE が繰り返し再評価されている可能性があります。
  2. 部分的な結果を #temp に具体化する テーブルは、式からいくつかの可能なオプションを削除することにより、計画のその部分に対してより最適な結合順序を強制する場合があります.
  3. 部分的な結果を #temp に具体化する テーブルは、不十分なカーディナリティの見積もりを修正することで、残りの計画を改善する可能性があります。
  4. 最も信頼できる方法は、単純に #temp を使用することです

    ポイント 1 に関して失敗した場合は、CTE または派生テーブルの中間実体化を強制するためのヒントを提供します . TOP(large_number) ... ORDER BY の使用 多くの場合、繰り返し再評価するのではなく、結果をスプールするように促すことができます。

    それが機能したとしても、スプールに統計はありません。

    ポイント 2 と 3 については、目的の計画が得られなかった理由を分析する必要があります。 sargable述語を使用するようにクエリを書き直すか、統計を更新すると、より良い計画が得られる可能性があります。クエリ ヒントを使用して目的のプランを取得できなかった場合。



    1. MySQL接続を強制終了する方法

    2. バックアップを実行するために、サーバー上で `heroku pgbackups:capture`はどのコマンドを実行しますか?

    3. Visual Studio:ContextSwitchDeadlock

    4. 最後の2文字の文字列で並べ替え