You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server 普通CTE查询是否会自动优化下推外层过滤条件?

问题解答

SQL Server的查询优化器会自动优化该CTE查询,不会先加载My_Table的全部记录再做过滤。

具体原理

  • SQL Server中的普通非递归CTE本质是临时定义的逻辑查询别名,没有预先固化的结果集,执行时会被优化器展开到外层查询中统一生成执行计划。
  • 你给出的示例属于无特殊逻辑的简单CTE,优化器会自动做谓词下推优化,将外层的WHERE col1 > 10过滤条件、TOP(10)限制、ORDER BY col2排序逻辑直接下推到基表My_Table的访问步骤中,实际执行逻辑等价于直接对基表做查询:
SELECT TOP(10)
    col1,
    col2
FROM
    My_Table
WHERE
    col1 > 10
ORDER BY
    col2
  • 只有当CTE内部包含TOP、DISTINCT、聚合计算、递归逻辑等特殊操作时,谓词下推才可能受限制,才会出现先计算CTE结果再做外层处理的情况。
  • 你可以在SSMS中打开「包括实际的执行计划」功能运行查询,直接查看执行步骤验证优化效果,基表扫描节点会直接携带col1>10的过滤条件,不会出现全表加载的操作。

内容的提问来源于stack exchange,提问作者Mariusz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 04:48:05