私はこのようなクエリを持っています:
select * from (
select * from TableX
where col1 % 2 = 0
) subquery
where col1 % 4 = 0
実際のサブクエリはもっと複雑です。サブクエリを単独で実行すると、おそらく200行がすぐに返されますが、クエリ全体を実行すると、待機に時間がかかりすぎます。
SQL Serverがここで最適化を行い、where
ステートメントをサブクエリにマージして、それほど効率的ではない新しい実行プランを生成することを私は知っています。実行プランを詳しく調べて、インデックスがないなど、統計が古くなっている理由を分析することはできますが。
しかし、BaseTableとして機能するサブクエリはデータのごく一部しか返さないので、それ以降のすべてのフィルタリングまたは結合はこれらのデータのごく一部でのみ行われることを私は確かに知っています。
私の質問は、外部where
ステートメントを気にせずに、SQLサーバーに最初にサブクエリを実行させることはできますか?(ところで、TempTableは私の最後のオプションであり、CTEは機能していません)