我有一个这样的查询:
select * from (
select * from TableX
where col1 % 2 = 0
) subquery
where col1 % 4 = 0
实际的子查询更复杂。当我单独执行子查询时,它可能会快速返回 200 行,但是当我执行整个查询时,等待时间太长。
我知道 sql server 在这里进行了一些优化并将where
语句合并到子查询中,并生成效率不高的新执行计划。尽管我可以深入研究执行计划并分析原因,例如索引丢失,统计数据陈旧。
但我当然知道,我作为 BaseTable 的子查询只会返回一小部分数据,所以我希望所有进一步的过滤或连接都只发生在这些小部分数据中。
我的问题是,我可以强制 sql server 先执行子查询,而不关心外部where
语句吗?(顺便说一句,TempTable 是我的最后一个选择,CTE 不起作用)