CTE(通用表表达式)与临时表或表变量相比,哪个更快?

CTE
(公用表表达式)vs
Temp tables
Table variables
,哪个更快?     
已邀请:
在一个特定情况下,我们将速度提高了50%,因此值得一试,但任何与性能相关的增强都需要进行基准测试,以便您可以将其进行比较。 PS:在我们使用CTE之前,我们用CTE写了多个查询。     
正如我在评论中已经说过的那样:它取消了! 它确实取决于你的查询,你的数据(有多少?它是什么类型?)等等。 但要记住几个要点: CTE是一个“内联视图”,仅对下一个语句有效;如果可能,SQL Server将在内存中保留临时结果 临时表有两种形式:仅对您的连接可见的那些(
create table #temp
),或对所有连接全局可见的那些(
create table ##temp
);当没有连接使用它们时,两者都将被自动删除。您可以在临时表上定义索引,它们是事务的一部分 表变量不允许您在它们上创建索引,也不允许它们参与交易舞蹈 - 这可以是专业人士或者骗子 - 只需要注意它!
ROLLBACK
对表变量中包含的数据没有影响....     
http://royalarun.blogspot.in/2013/10/difference-between-cte-and-temp-table.html SQL Server中CTE与Temp表和表变量的区别 临时表是在Tempdb数据库中物理创建的。这些表充当普通表,也可以具有约束,像普通表一样索引。它分为两个本地临时表和全局临时表, 本地临时表仅可用于创建表的SQL Server会话或连接(表示单个用户)。 全局临时表可用于所有SQL Server会话或连接(表示所有用户)。 这些可以由任何SQL Server连接用户创建,并且当所有SQL Server连接已关闭时会自动删除这些连接用户。您需要事务回滚支持。 CTE - 公用表表达式是一个命名的临时结果集,用于处理复杂的子查询数据。这存在于声明的范围内。这是在内存而不是Tempdb数据库中创建的。您无法在CTE上创建任何索引。 表变量的作用类似于变量,并且存在于特定批次的查询执行中。它从批处理中自动丢弃。这也是在Tempdb数据库中创建的,但不是在内存中创建的。您不能在表变量上创建非聚集索引,除非索引是表上PRIMARY KEY或UNIQUE约束的副作用。 如果结果集很小,则表变量始终是最佳选择。     

要回复问题请先登录注册