-1

我正在编写一份报告,结果是多个#temp 表的组合。结构如下

  1. 存储过程 1,它有一个提供 50 万行的临时表

  2. 存储过程 2,它有一个提供 10 万行的临时表

最后,我需要合并上面 2 SP 的结果集,再次使用临时表并制作一个最终结果集以供报告。现在我担心性能,以后如果数据增加,它会影响临时数据库。我们通常每月暂存数据,一个月内它的数据库可能包含大约 100 万行。temp db 可容纳的最大容量是多少。上面的方法会不会有效果。

4

2 回答 2

1

首先,它与行数无关,而与行的大小有关。因此,如果每行有 7KB,那么对于 60 万行,它大约是 4 GB。现在,这还没有结束,SQL Server 使用 TempDb 来存储内部对象、版本对象和用户对象,其中还包括中间结果。在您的情况下,您可以预期大小会增长超过 4 GB。有两种可能的方法来克服这个问题:

  1. 调整您的查询,尽量减少临时表、表变量、CTE、VARCHAR(MAX) 或游标等大型对象的使用。
  2. 增加您的 Tempdb 文件大小。根据观察计算最大大小 [重建索引是最好的选择]

在现实世界的场景中,查询本身总是有改进的机会。检查是否可以通过正确连接表或使用视图来避免使用 tempdb。

于 2015-06-18T04:22:12.090 回答
0

的大小tempdb仅受存储它的磁盘大小的限制。(或者可以限制在数据库的属性中。)

至于一百万行。如今,它并不多,甚至“一点”。特别是,如果我们谈论报告的数据。

但是,我检查了你是否真的需要那个临时表。摆脱它们(如果它们是不必要的),您可以加快查询速度并减少tempdb使用量。

于 2015-06-11T05:02:56.423 回答