如何找出SQL Server表使用了多少空间?

时间:2017-10-19 16:37:33

标签: sql sql-server sql-server-2012

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

更新

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

虽然MySQL不适合SQL Server,但确实存在这样的答案:{{3}}你可以查看它以了解我的意思。

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

我们需要查看完整的数据库架构,包括表格和列以及所有字段'数据类型。没有这些信息,这只是一个幸运的猜测。以下是每种数据类型大小的有用备忘单:https://www.connectionstrings.com/sql-server-2012-data-types-reference/

然后你只需要做数学并计算X所需的空间,这是你的记录数

答案 2 :(得分:0)

这实际上是一个扩展评论,因为它没有直接回答这个问题。

对于大多数用途,您只需使用列的大小,将它们一起添加,然后乘以行数。这低估了估计,但这是合理的。并且(取决于您处理类型的方式)可能是对导出数据大小的合理估计。

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

  • 个人字段的大小。由于某些类型具有不同的大小,因此这些更加困难,因此这些类型完全取决于数据。
  • 表占用的页数(或者相当于每个数据页的填充程度)。请注意,这可能会有所不同,具体取决于每个表的填充程度。
  • "溢出"占用的页数数据类型,例如varchar(max)
  • 数据页是否经过压缩或加密。
  • 表格的索引。
  • 每个索引页的填充程度。

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

换句话说,没有一个简单的答案。两个不同系统上的等效表可能占用非常不同的空间。对于"同样的#34;在不同时间在同一系统上的表。

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