【问题标题】:Why does my table file size double after altering a column?为什么更改列后我的表格文件大小会翻倍?
【发布时间】:2013-07-22 19:42:32
【问题描述】:
在我将列的 varchar 限制从 512 更改为最大值后,在 SQL Server 2008 R2 中,我注意到表的文件大小增加了一倍多。我没想到它会增加这么多,但是自从我增加它以来,我认为这是有道理的。因此,我尝试将其更改为更合理的 2500 限制,结果发现我的表格大小再次增加了一倍以上的文件大小(现在是原始大小的 4 倍多)。
唯一的索引是主键,这是我运行的脚本:
ALTER TABLE dbo.Notes
ALTER COLUMN [note] VARCHAR(MAX) NULL
什么是我不明白的?
【问题讨论】:
标签:
sql-server
alter-table
alter-column
【解决方案1】:
对于同一个数据集,varchar(max) 不应占用比 varchar(2500) 更多的空间。
也许 SQL Server 在更改表时需要临时空间?尝试重建你的表(我假设你的主键是聚集的):
alter index NameOfPrimaryKey on dbo.Notes rebuild
然后再次检查表数据使用情况。
【解决方案2】:
varchar(max) 未存储在行中。它存储在单独的位置。原始行有一个指向 varchar(max) 数据位置的指针。
因此,如果您将数据类型从 varchar(512) 更改为 varchar(max),那么很自然地期望表大小会增加。
如果您想保留数据类型 varchar(max) 并避免将数据存储在单独的文件中,请尝试使用配置保持一定长度的 varchars 与行内联。
以上所有解释都没有解释表大小变成 4 倍,所以请按照上面的建议重建您的主索引。