更改数据类型后,在SQL 2005表中回收空间?

时间:2009-06-02 14:42:46

标签: sql sql-server sql-server-2005 tsql

我使用包含许多nvarchar列的表来构建数据库。这些表变得相当大,我决定将数据类型更改为varchar以减少存储,因为我们不使用国际字符。表上的“数据空间”(右键单击,然后是“属性”)没有更改。但是,如果我将此表复制到新表中,那么使用的数据空间大约是原始表的60%。

我在其他情况下使用'DBCC CLEANTABLE'来在删除可变长度列之后回收空间。但是,当改变变长数据类型时,这似乎不起作用。我该如何重新获得这个空间?

对于那些不熟悉DBCC CLEANTABLE的人,MS有一篇很好的文章,其中包含针对AdventureWorks的示例代码。

http://msdn.microsoft.com/en-us/library/ms174418(SQL.90).aspx

2 个答案:

答案 0 :(得分:4)

如果DBCC不起作用,请重建聚集索引。

答案 1 :(得分:0)

由于BOL指定CLEANTABLE只有可变长度列的空闲页面。您的数据库可能是碎片,通常在数据库操作期间发生。看起来SQL Server认为碎片页面正在使用中,并且不会将其显示为可用空间(btw sp_spaceused调用此未分配的空间)

您可以通过DBCC SHOWCONTIG看到表格的碎片化程度。

通过重新构建数据库中的所有索引,您将摆脱碎片,这就是将数据复制到其他地方时会发生的情况。