为什么在大结果集中使用临时表是什么收益

时间:2013-06-28 00:51:43

标签: sql-server

为什么在返回大型结果集的存储过程中使用临时表。这有助于提高性能?是否有一个例子可能是几个表的连接返回大量数据以及临时表如何帮助在存储过程中执行此查询?

2 个答案:

答案 0 :(得分:1)

根据我的经验,当查询非常复杂以至于查询优化器难以提出一个体面的计划时,它们可能会在有限的情况下提供帮助。如果正确完成,将这样的查询拆开并将中间结果存储在临时表中可能会有所帮助。我使用这种策略作为最后的手段,因为临时表很昂贵,对于大型结果集,它们可能非常昂贵。

答案 1 :(得分:0)

我发现这篇优秀的文章在回答这个问题时非常有用:
Paul White - temporary tables in stored procedures

只是为了强调文章中的一些概念:

  • 临时表可以非常有用,可以将大型查询简化为更小的部分,从而使优化器有更好的机会找到良好的执行计划,提供有关中间结果集的统计信息
  • 尽管有明确的CREATE和DROP语句
  • ,但临时对象可以跨执行进行缓存
  • 还缓存与缓存的临时对象关联的统计信息

就我而言,我只想补充一点,如果存储过程多次访问另一台服务器中的相同数据而且连接速度很慢,将它带入临时表可能会很有用。当然,表变量也可用于此目的。