1

考虑以下 SQL (SQL Server 2008) 语句:

WITH MyResult AS
(
  SELECT 
    Name,
    Row_ID AS ORD
  FROM Person Where Gender = @Gender
)
SELECT *
FROM MyResult
WHERE ORD > 5

MyResult 是否存储在 tempdb 的临时表中?还是它做其他事情?

我们正在优化一些查询,并希望更好地理解 WITH 语句(内部)以帮助衡量性能等。

谢谢

4

1 回答 1

2

不,根据此 MSDN 文章

... CTE 是一种语言级别的结构——这意味着 SQL Server 不会在内部创建临时表或虚拟表...

而且,正如这里提到的

可以将公用表表达式 (CTE) 视为在单个 SELECT、INSERT、UPDATE、DELETE 或 CREATE VIEW 语句的执行范围内定义的临时结果集。CTE 类似于派生表,因为它不存储为对象,并且仅在查询期间持续存在。

于 2010-06-24T09:08:35.187 回答