Performance CTE(公共表表达式)与临时表或表变量相比,哪个更快?
Performance CTE(公共表表达式)与临时表或表变量相比,哪个更快?,performance,sql-server-2008-r2,common-table-expression,temp-tables,table-variable,Performance,Sql Server 2008 R2,Common Table Expression,Temp Tables,Table Variable,CTE(通用表格表达式)与Temp tables或Table variables相比,哪一种更快?在一种特定情况下,我们向CTE移动的速度提高了50%,因此值得尝试一下,但任何与性能相关的增强都需要进行基准测试,以便您可以相互比较 PS:在得到我们现在使用的查询之前,我们写了不止一个带有CTE的查询。正如我在评论中所说:这取决于情况 这确实取决于你的查询、你的数据(有多少?是什么类型的???)等等 不过,要记住几个要点: CTE是仅对下一条语句有效的“内联视图”;如果可能,SQL Server
CTE
(通用表格表达式)与Temp tables
或Table variables
相比,哪一种更快?在一种特定情况下,我们向CTE移动的速度提高了50%,因此值得尝试一下,但任何与性能相关的增强都需要进行基准测试,以便您可以相互比较
PS:在得到我们现在使用的查询之前,我们写了不止一个带有CTE的查询。正如我在评论中所说:这取决于情况强> 这确实取决于你的查询、你的数据(有多少?是什么类型的???)等等 不过,要记住几个要点:
- CTE是仅对下一条语句有效的“内联视图”;如果可能,SQL Server将在内存中保留一个临时结果
- 临时表有两种风格:仅对连接可见的(
),或对所有连接全局可见的(createtable#Temp
);当不再有连接使用它们时,这两个选项都将自动删除。您可以在临时表上定义索引,它们是事务的一部分createtable#Temp
- 表变量不允许您在其上创建索引,也不允许它们参与事务舞蹈-这可能是赞成或反对-请注意!
对表变量中包含的数据没有影响回滚
简单:这要看情况了这个问题没有一个单一的答案-它确实取决于您的数据(多少?什么类型?),您的CTE有多复杂。。。。。实际上,这是不可能回答的,真的……@marc_s:我目前有一个基于表变量的解决方案,我正在考虑将其更改为CTE,现有的查询有3个连接和大量基于日期的检查。所以我想如果CTE能改善什么?@System.Expection:你能给我们看看你的问题吗??再说一遍:如果不知道你到底在做什么,就不可能做出任何真正有用的评论。。。