考虑以下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中的临时表中?或者它还做了什么?
我们正在优化一些查询,希望能够更好地理解语句(内部)以帮助衡量性能等。
谢谢
不,按 this MSDN article
…CTE是一种语言级别 构造“表示SQL Server 不在内部创建临时或虚拟 桌子。。。
而且, as mentioned here :
公用表表达式(CTE)可以是 作为一个临时结果集 在执行中定义的 单次选择、插入 更新、删除或创建视图 语句。CTE类似于 未存储的派生表 作为一个对象,只为 查询的持续时间。