相关疑难解决方法(0)

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

我有一个复杂的查询,我需要在后续查询(实际更新语句)中使用.我尝试过使用CTE和临时表.使用CTE的性能与临时表方法相比非常糟糕.它像15秒对毫秒.为了简化测试而不是在后续查询中加入CTE/Temp表,我只是从中选择了*.在那种情况下,他们执行相同的操作

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

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

*注意我也使用了表变量,它与临时表方法相当.

谢谢

sql t-sql sql-server sql-server-2005 common-table-expression

12
推荐指数
2
解决办法
2万
查看次数