【问题标题】: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 倍,所以请按照上面的建议重建您的主索引。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-10-05
        • 2021-04-06
        • 2015-08-29
        • 2019-06-10
        • 1970-01-01
        • 1970-01-01
        • 2022-06-30
        相关资源
        最近更新 更多