2009-06-02 70 views
1

我使用包含許多nvarchar列的表格來創建數據庫。表格變得相當大,我決定將數據類型更改爲varchar以減少存儲空間,因爲我們不使用國際字符。表格中的「數據空間」(右擊,然後是「屬性」)沒有改變。但是,如果將此表複製到新表中,那麼使用的數據空間大約是原表大小的60%。更改數據類型後回收SQL 2005表中的空間?

我在其他實例中使用了'DBCC CLEANTABLE'來刪除可變長度列的DROPPING之後的空間。但是,在更改可變長度數據類型時,這似乎不起作用。我該如何解決這個問題?

對於那些不熟悉DBCC CLEANTABLE的人,MS有一篇關於AdventureWorks的示例代碼的文章。

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

+0

空間真的有那麼大的問題,你需要擔心這樣的事情? – 2009-06-02 14:46:29

回答

4

重建聚簇索引如果DBCC不起作用。

+0

@gbn + 1:這會做到這一點。 – 2009-06-02 15:59:12

0

由於BOL從可變長度列指定CLEANTABLE只有空閒的頁面。數據庫可能是碎片的,在數據​​庫操作過程中通常會發生。它看起來像SQL Server認爲一個碎片頁正在使用,並沒有顯示它作爲可用空間(順便說一句sp_spaceused調用這個未分配的空間)

你可以看到你的表是如何使用DBCC SHOWCONTIG碎片化。

通過重新構建數據庫中的所有索引,您將擺脫碎片化,這幾乎是將數據複製到其他位置時發生的情況。