【发布时间】:2020-06-10 15:34:39
【问题描述】:
这是我第一次在这里发帖,希望我没有搞砸任何事情。
我使用了一个更改表来向现有数据库添加一个位类型列,以便了解该项目是否缺货。添加新列时,它会获得空值,因此我想将其更新为 0(有货),并且在大多数数据库中,都没有问题。问题是在较大的数据库中,我发现数据分区大小增长了很多(从 700 gb 到 800 gb)导致一些驱动器空间问题。
该表大约有 20 亿行,因此数据分区的增加是意料之中的,但从未想过 bit 类型的列会导致这样的增加,因为它假设每个列应该消耗 1 位(或至少从我的理解)。
我不是数据库专家,我需要确定为什么会发生这种情况,以便更好地理解并能够继续对其余数据库进行更改,以确保这不会失控。
【问题讨论】:
-
您是否添加了具有默认值的列?什么版本/版本的 SQL Server?该表没有增长那么多,因为您添加了一个位列。该表正在增长,因为如果您添加了一列并且数据不再适合页面(例如页面已经满),SQL Server 必须分配一个新页面并将一半数据移到那里。如果您的所有页面都已满,那么您将分配很多新页面。在较新的版本(也许只有企业版?)上,可以添加它,这样它就不需要预先分配所有新空间,因此它更快/影响更小。
-
我将 0 设置为默认值,但在已经存在的数据上,该值设置为 null,这就是为什么我在此之后更新将值设置为 0。SQL Server 版本是 2012。我会阅读您分享的链接。谢谢!
-
这真的与 programming 没有任何关系(this site all about),但是与数据库管理 - 所以这里是题外话,属于dba.stackexchange.com - 投票移动。
-
对不起,我不知道。我该怎么做才能移动它??
标签: sql-server database size