alter-table - 更改列之后,为什么我的表文件大小加倍?

  显示原文与译文双语对照的内容
0 0

在将一列的varchar限制从 512更改为max之后,在 SQL Server 2008 R2中,我注意到表的文件大小超过了2 倍。 我不期望它增加了这一点,但是自从我增加它以后,我认为它是有意义的。 所以我试图将它更改为 2500的更合理的限制,只是在文件大小( 现在超过 4x ) 中再次增加一倍。

唯一的索引是主键,这是我运行的脚本:

ALTER TABLE dbo.Notes
ALTER COLUMN [note] VARCHAR(MAX) NULL

我不理解的是什么?

时间:原作者:2个回答

0 0

对于同一数据集,varchar(max) 不应该占用比 varchar(2500) 更多的空间。

也许 SQL Server 在改变桌子的时候需要临时空间? 尝试重建你的表( 我假设你的主键是):

alter index NameOfPrimaryKey on dbo.Notes rebuild

然后再次检查表数据使用情况。

原作者:
0 0

varchar(max) 未存储在行中。 它存储在单独的位置。 原始行有指向 varchar(max) 数据位置的指针。 因此,如果将数据类型从 varchar(512) 更改为 varchar(max),那么表大小就会变得很自然。

如果希望保持数据类型 varchar(max),避免在单独文件中存储数据存储,请尝试将特定长度的varchar与行保持一致。

上解释没有解释表大小获取 4x 所以请重新构建你的主索引,如下所示。

原作者:
...