2017-10-19 74 views
-1

是否有可能获得特定表使用的磁盘空间量?假设我有一百万个用户存储在我的表中,我想知道存储所有用户和/或其中一个用户需要多少空间。如何找出SQL Server表使用多少空间?

更新

我打算使用Redis的从一个特定的表缓存中的某些字段内存后快速检索所需要的数据。所以我需要计算它需要多少空间,因此它是否适合记忆。当然,这取决于我在表格中使用的数据类型,但是如果一个表格包含几十个字段,则需要花费太多时间来逐一计算。

虽然MySQL不适用于SQL Server,但MySQL的确有这样的答案:How can you determine how much disk space a particular MySQL table is taking up?您可以查看它以了解我的意思。

+2

它取决于您用来存储它们的数据类型。 –

+0

你不能轻易做到这一点。您可以计算每列所需的最小大小并对它们进行求和以找出基本数据的存储需求,但除了与列相关的索引占用的空间之外,还会为每个列和行添加额外的开销,与数据库本身相关的开销,可能被视为该表的大小的一部分,以及其他因素。反正有什么不同呢?您的关注点应该是整个数据库的大小,而不是单个表或行。 –

+1

如果您拥有SSMS,则可以右键单击对象资源管理器中的表格,转到属性,然后查看存储页面。数据空间字段是该表中数据的大小,但可能不包括表中的部分开销成本。 – zambonee

回答

1

如果您有SSMS,您可以在对象资源管理器中右键单击该表,然后转到属性,然后查看存储页面。数据空间字段是该表中数据的大小,但可能不包括表中的部分开销成本。

0

号这是一个真正的扩展评论,因为它不直接回答这个问题。

对于大多数用途,您只需使用列的大小,将它们相加,然后乘以行数。这个估计很低,但这是合理的。并且(取决于你如何处理这些类型)可能是导出数据的合理估计。

也就是说,表的存储是一件困难的事情。以下是您需要考虑的一些因素:

  • 单个字段的大小。由于某些类型具有不同的大小,因此这会变得稍微困难​​一些,因此这些数据完全取决于数据。
  • 表格占用的页面数量(或者等同于每个数据页面的完整程度)。请注意,这可能会有所不同,具体取决于每个表格的完整程度。
  • “溢出”数据类型占用的页数,如varchar(max)
  • 数据页面是否被压缩或加密。
  • 该表的索引。
  • 每个索引页面有多满。

而且,毫无疑问,我遗漏了一堆其他相关的内部细节(here是一个开始页面布局的地方)。

换句话说,没有一个简单的答案。两个不同系统上的等效表可能会占用非常不同的空间。同一个系统在不同时间的“相同”表格也是如此。

使用数据库时的一般答案是,您需要比行数*行大小更多的空间 - 我似乎记得在某个时间点使用3因子。一般来说,存储相当便宜,所以这不是使用数据库的限制因素。

相关问题