4

在 SQL Server 2008 的上下文中。

我正在将值从具有数据类型的列压缩和迁移到具有Text数据类型的另一列Image,同一个表。目前,我们不想删除 Text 列。所以,我只是将该列的所有值设置为 NULL。

设置为 NULL 是否会立即提供空间增益?即减少数据库大小?

删除列会这样做吗?

如果没有,需要做哪些额外的事情来声明未使用的空间?

4

3 回答 3

1

对于表的单行中的列值,文本列至少需要 16 个字符值。要在此列中将所有值设置为空,请重新组织数据和索引。

为了回收这个空间,我们必须使用 DBCC CLEANTABLE 或收缩数据库。

语法:DBCC CLEANTABLE(Databasename, "Table_name or View_name")

请参阅此链接以对表进行碎片整理和重新索引

于 2012-05-07T15:21:53.177 回答
1

要实际减小 DATABASE 大小,您需要:

  • 删除列
  • 如果没有聚集索引,则重建聚集索引或表
  • 收缩数据库文件

我不建议缩小,因为它会导致碎片。但是,数据库的磁盘占用量不会自动下降。您将拥有一个内部有空白空间的数据库,它可以填充更多数据/索引,而无需进一步扩展数据库。

于 2012-05-07T15:30:12.597 回答
0

将值设置为 NULL 不会有任何区别。删除列不会自行释放磁盘空间。您还需要重建索引:Disk Space Taken By Dropped Columns

于 2012-05-07T12:50:41.933 回答