我有一个查询,该查询创建多个临时表,然后将数据插入其中。据我了解,这是表假脱机的潜在原因。当我查看执行计划时,我的大部分处理工作都花在了Table Spool上。有什么好的技术可以改善这类性能问题?使用视图或CTE会给我带来比临时表更多的好处吗?
我还注意到,当我将鼠标悬停在每个表线轴上时,输出列表来自同一临时表。
最佳答案
好吧,根据您提供的信息,我只能说:查询优化器已选择最佳方案。它使用表假脱机来加快执行速度。不使用表假脱机的替代方案甚至会更慢。
如何显示查询,表架构和基数以及计划。
更新资料
我当然理解您是否无法向我们显示查询。但是,真的很难猜测,为什么在不知道任何细节的情况下,引擎会造成假脱机。我建议您浏览Craig Freedman的博客,他是查询优化器团队的一名工程师,并且介绍了SQL 2005/2008优化器的许多内部工作原理。以下是我可以很快找到的一些条目,它们涉及一种或多种形式的假脱机主题:
Recursive CTEs
Ranking Functions: RANK, DENSE_RANK, and NTILE
More on TOP
SQL客户支持团队还在http://blogs.msdn.com/psssql/上有一个有趣的博客
“ sqltips”(关系引擎团队博客)有一些技巧,例如Spool operators in query plan...