我有一个测试数据库,其中包含 1 个包含大约 5000 万条记录的表。该表最初有 50 列。该表没有索引。当我执行“sp_spaceused”过程时,我得到“24733.88 MB”作为结果。现在为了减小这个数据库的大小,我删除了 15 列(主要是 int 列)并运行“sp_spaceused”,结果仍然是“24733.88 MB”。
为什么删除这么多列后数据库大小没有减少?我在这里错过了什么吗?
编辑:我尝试过缩小数据库,但也无济于事
我有一个测试数据库,其中包含 1 个包含大约 5000 万条记录的表。该表最初有 50 列。该表没有索引。当我执行“sp_spaceused”过程时,我得到“24733.88 MB”作为结果。现在为了减小这个数据库的大小,我删除了 15 列(主要是 int 列)并运行“sp_spaceused”,结果仍然是“24733.88 MB”。
为什么删除这么多列后数据库大小没有减少?我在这里错过了什么吗?
编辑:我尝试过缩小数据库,但也无济于事
尝试运行以下命令:
DBCC CLEANTABLE ('dbname', 'yourTable', 0)
它将从表或索引视图中删除的可变长度列中释放空间。此处的更多信息DBCC CLEANTABLE和此处的Space used does not get changed after drop a column
此外,正如在此答案的第一条评论中发布的链接上正确指出的那样。执行完 DBCC CLEANTABLE 命令后,您需要重建聚簇索引以防表有一个,以便取回空间。
ALTER INDEX IndexName ON YourTable REBUILD
当从表中删除任何可变长度列时,它不会减小表的大小。在重组或重建索引之前,表大小保持不变。
还有 DBCC 命令 DBCC CLEANTABLE,可用于回收以前被可变长度列占用的任何空间。这是语法:
DBCC CLEANTABLE ('MyDatabase','MySchema.MyTable', 0)WITH NO_INFOMSGS;
GO
拉吉
数据库大小不会仅仅因为您删除了对象而缩小。数据库服务器通常持有回收的空间以用于后续数据插入或新对象。
要回收释放的空间,您必须缩小数据库文件。请参阅如何缩小我的 SQL Server 数据库?