在SQL Server 2008中回收未使用的空间

ope*_*sas 6 administration sql-server-2008

我有一个包含超过300,000条记录的表,大小约为1.5 GB

在那张桌子里,我有三个varchar(5000)字段,其余的是小字段.

在发布时update,将这三个字段设置为''.

收缩(数据库和文件)后,数据库使用与以前几乎相同的空间...

DBCC SHRINKDATABASE(N'DataBase' )
DBCC SHRINKFILE (N'DataBase' , 1757)
DBCC SHRINKFILE (N'DataBase_log' , 344)
Run Code Online (Sandbox Code Playgroud)

有关如何回收磁盘空间的任何想法?

Phi*_*ley 3

本质上,您必须将表的内容从硬盘驱动器上的一个位置“移动”到另一个位置。当这样移动时,SQL 将有效地“重新打包”页面的内容。仅用 3(或 0 和翻转的空位掩码)替换 5000 字节的数据不会导致 SQL 修改或重写表页的内容。

如果表有聚集索引,只需重新索引它(ALTER INDEX...REBUILD...)就可以了。

如果表没有聚集索引,您可以创建一个然后删除它,或者 SELECT...INTO... 一个新表,删除旧表,然后将新表重命名为原始名称。