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

时间:2013-01-24 08:12:36

标签: sql sql-server sql-server-2008

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

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

编辑:我已经尝试过数据库收缩,但它没有帮助

3 个答案:

答案 0 :(得分:19)

尝试运行以下命令:

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

它将从表或索引视图中删除的可变长度列中释放空间。这里有更多信息DBCC CLEANTABLESpace used does not get changed after dropping a column

另外,正如在此答案的第一条评论上发布的链接上正确指出的那样。执行DBCC CLEANTABLE命令后,如果表中有一个,则需要重新建立聚簇索引,以便返回空间。

ALTER INDEX IndexName ON YourTable REBUILD

答案 1 :(得分:3)

从表中删除任何可变长度列时,它不会减小表的大小。在重组或重建索引之前,表大小保持不变。

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

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

拉​​吉

答案 2 :(得分:1)

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

要回收释放的空间,必须缩小数据库文件。见How do I shrink my SQL Server Database?