我有这样的查询:
;WITH My_CTE AS
(
SELECT
col1,
col2
FROM
My_Table
)
SELECT TOP(10)
col1,
col2
FROM
My_CTE
WHERE
col1 > 10
ORDER BY
col2
SQL Server将首先加载My_Table
中的所有记录,然后过滤掉不满足where子句的记录,还是在CTE中优化选择?
注意TOP, ORDER BY和WHERE子句只在外部查询中出现。
将优化CTE以及非CTE查询。
CTE只是一个"便于书写"的工具。除了RECURSIVE查询。
SQL引擎的代数器部分将复合查询重新排列为单个查询,(代数简化)然后将给定的代数树传递给优化器…