代码之家  ›  专栏  ›  技术社区  ›  Russell

WITH语句如何存储SELECT查询的记录集?

  •  1
  • Russell  · 技术社区  · 14 年前

    考虑以下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中的临时表中?或者它还做了什么?

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

    谢谢

    1 回复  |  直到 14 年前
        1
  •  2
  •   AdaTheDev    14 年前

    不,按 this MSDN article

    …CTE是一种语言级别 构造“表示SQL Server 不在内部创建临时或虚拟 桌子。。。

    而且, as mentioned here :

    公用表表达式(CTE)可以是 作为一个临时结果集 在执行中定义的 单次选择、插入 更新、删除或创建视图 语句。CTE类似于 未存储的派生表 作为一个对象,只为 查询的持续时间。