1

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

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

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

我不明白的是什么?

4

2 回答 2

1

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

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

alter index NameOfPrimaryKey on dbo.Notes rebuild

并在此之后再次检查表数据使用情况。

于 2013-07-23T16:08:11.580 回答
1

varchar(max) 未存储在行中。它存储在单独的位置。原始行有一个指向 varchar(max) 数据位置的指针。因此,如果您将数据类型从 varchar(512) 更改为 varchar(max),则很自然地期望表大小会增加。

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

以上所有解释都没有解释表大小变成 4 倍,所以请按照上面的建议重建主索引。

于 2013-07-23T17:54:23.780 回答