我有一个测试数据库,其中1个表有大约5000万条记录。该表最初有50列。该表没有索引。当我执行“sp_spaceused”过程时,我得到“24733.88 MB”。现在为了减少这个数据库的大小,我删除了15列(主要是int列)并运行“sp_spaceused”,结果我仍然得到“24733.88 MB”。
为什么在删除这么多列后数据库大小没有减少?我在这里错过了什么吗?
编辑:我已经尝试过数据库收缩,但它没有帮助
答案 0 :(得分:19)
尝试运行以下命令:
DBCC CLEANTABLE ('dbname', 'yourTable', 0)
它将从表或索引视图中删除的可变长度列中释放空间。这里有更多信息DBCC CLEANTABLE和Space 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?