【发布时间】:2013-05-22 16:01:14
【问题描述】:
我也可以
select * into #randomTenUsers from
(select top 10 * from users)x
select * from #randomTenUsers
或
WITH randomTenUsers as (select top 10 * from users)
select * from randomTenUsers
据我了解,WITH 语句也会创建一个临时结果集。
为什么应该优先使用 WITH 而不是临时表,反之亦然?
【问题讨论】:
-
对于 CTE (WITH) 何时比临时表更好或性能更好,没有硬性规定。如果您需要多个语句的数据 -> 那么您需要一个临时表,因为 CTE 仅存在于下一条语句。另一方面,使用 CTE 比设置、填充、操作和最终删除临时表要容易得多,也不那么麻烦。所以最后:这取决于你的具体情况;如果这两种方法都可以完成这项工作,我会先使用 CTE,但如果它对性能至关重要,也可以使用临时表进行测试并选择
-
我们有一个例子,使用 CTE 的结果比使用临时表要差得多。如果您的查询适用于大量数据(超过几千行),那么两者都值得尝试。显然,这可能是因为 SQL Server 不为 CTE 保留统计信息(如行数),但它为临时表保留。这可能会导致执行计划不理想。
标签: sql-server sql-server-2008-r2