为什么在更改列后我的表文件大小加倍?

时间:2013-07-23 15:59:50

标签: sql-server alter-table alter-column

在我将列的varchar限制从512更改为最大值后,在SQL Server 2008 R2中,我注意到表的文件大小增加了一倍多。我没想到会增加这么多,但是因为我增加了它,我认为这是有道理的。因此我尝试将其更改为更合理的2500限制,仅发现我的表格大小再次超过文件大小的两倍(现在超过原始版本的4倍)。

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

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

我不理解的是什么?

2 个答案:

答案 0 :(得分:1)

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

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

alter index NameOfPrimaryKey on dbo.Notes rebuild

然后再检查表数据用法。

答案 1 :(得分:1)

varchar(max)未存储在行中。它存放在不同的位置。原始行具有指向varchar(max)数据位置的指针。 因此,如果将数据类型从varchar(512)更改为varchar(max),那么期望表大小增长是很自然的。

如果要保留数据类型varchar(max)并避免将数据存储在单独的文件中,请尝试使用一个配置来保持一定长度的varchars与行内联。

上述所有说明均未解释获得4x的表格大小,因此请按照上面的建议重建您的主要索引。