SQL 2005 CTE vs TEMP表在与其他表的连接中使用时的性能

前端之家收集整理的这篇文章主要介绍了SQL 2005 CTE vs TEMP表在与其他表的连接中使用时的性能前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个复杂的查询,我需要在后续查询(实际上是更新语句)中使用.我尝试过使用CTE和临时表.使用CTE的性能与临时表方法相比是可怕的.它的东西像15秒vs毫秒.为了简化测试,而不是在后续查询中加入CTE / Temp表,我简单地从中选择*.在这种情况下,它们执行相同.

我已经看到执行计划的两种方法,在后续查询中的连接,然后只需选择*.用简单的选择查询计划大致相同,但是随后的连接选择查询计划不是.具体来说,用于创建和填充临时表的查询计划的一部分保持不变,而用于创建和填充CTE的查询计划部分随后在具有连接的查询中使用时会发生巨大变化.

我的问题是为什么CTE的创建和填充的查询计划会随着temp临时表的使用而改变.同样在什么情况下,CTE会产生比临时表更好的性能

*注意我也使用了一个表变量,它与temp表方法相当.

谢谢

解决方法

你问一个复杂的问题,所以你得到一个复杂的答案:这取决于. (我讨厌那个回应).

然而,严重的是它与优化器如何选择数据计划有关(您已经知道了这一点);临时表或变量就像一个永久结构,因为执行计划将执行与首先填充该结构相关联的操作,然后在后续操作中使用该结构. CTE不是临时表; CTE的使用在后续操作使用之前不会计算,因此使用量会影响计划的优化.

CTE实施可重用性和维护问题,不一定是性能;然而,在许多情况下(如递归),它们的表现要优于传统的编码方法.

猜你在找的MsSQL相关文章