在我将列的varchar限制从512更改为最大值后,在SQL Server 2008 R2中,我注意到表的文件大小增加了一倍多。我没想到会增加这么多,但是因为我增加了它,我认为这是有道理的。因此我尝试将其更改为更合理的2500限制,仅发现我的表格大小再次超过文件大小的两倍(现在超过原始版本的4倍)。
唯一的索引是主键,这是我运行的脚本:
ALTER TABLE dbo.Notes
ALTER COLUMN [note] VARCHAR(MAX) NULL
我不理解的是什么?
答案 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的表格大小,因此请按照上面的建议重建您的主要索引。