我有一个复杂的查询,需要在后续查询(实际更新语句)中使用。我已经尝试使用CTE和临时表。使用CTE的性能与临时表方法相比是非常糟糕的。它的东西像15秒比毫秒。为了简化测试,而不是在随后的查询中加入CTE/Temp表,我只需从中选择*。在这种情况下,他们表现相同。SQL 2005 CTE vs TEMP表在其他表的连接中使用时的性能
我已经看过这两种方法的执行计划,并在随后的查询中加入连接,然后简单地选择*。通过简单的选择查询计划大致相同,但随后的选择查询计划不是。具体来说,用于创建和填充临时表的查询计划部分保持不变,而用于创建和填充CTE的查询计划部分随后在具有连接的查询中使用时发生显着变化。
我的问题是,为什么CTE的创建和填充的查询计划随后如何使用,而临时表不是这样。同样在什么情况下,CTE会比临时表产生更好的性能?
*注意我也使用了表变量,它与临时表方法相当。
感谢
是的物化!定义中的PK/IX可能很好。 – crokusek 2013-03-08 17:56:39