12

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

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

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

4

3 回答 3

22

尝试运行以下命令:

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
于 2013-01-24T08:19:47.187 回答
3

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

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

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

拉吉

于 2013-01-24T08:22:10.763 回答
1

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

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

于 2013-01-24T08:17:38.200 回答