删除列不会减小数据库大小



我有一个测试数据库,其中有 1 个表,大约有 5000 万条记录。该表最初有 50 列。该表没有索引。当我执行"sp_spaceused"过程时,结果是"24733.88 MB"。现在为了减小这个数据库的大小,我删除了 15 列(主要是 int 列)并运行"sp_spaceused",结果仍然得到"24733.88 MB"。

为什么删除这么多列后数据库大小没有减少?我在这里错过了什么吗?

编辑:我尝试过数据库收缩,但也无济于事

尝试运行以下命令:

DBCC CLEANTABLE ('dbname', 'yourTable', 0)

它将从表或索引视图中删除的可变长度列中释放空间。更多信息在这里 DBCC 清洁表和这里 删除列后使用的空间不会改变

此外,正如在此答案的第一条评论上发布的链接上正确指出的那样。执行 DBCC CLEANTABLE 命令后,您需要重新生成聚集索引,以防表有一个聚集索引,以便取回空间。

ALTER INDEX IndexName ON YourTable REBUILD

当从表中删除任何可变长度列时,它不会减小表的大小。表大小保持不变,直到重新组织或重建索引。

还有DBCC命令DBCC CLEANTABLE,它可以用来回收以前被可变长度列占用的任何空间。语法如下:

DBCC CLEANTABLE ('MyDatabase','MySchema.MyTable', 0)WITH NO_INFOMSGS;
GO

拉吉

数据库大小不会仅仅因为您删除了对象而缩小。数据库服务器通常保存回收的空间,以用于后续数据插入或新对象。

若要回收释放的空间,必须收缩数据库文件。请参阅如何收缩我的 SQL Server 数据库?

最新更新