1

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

4

2 回答 2

1

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

于 2013-06-28T01:41:10.767 回答
0

我发现这篇优秀的文章在回答这个问题时非常有用:
Paul White - 存储过程中的临时表

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

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

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

于 2013-06-28T01:37:28.253 回答