2009-06-05 65 views
3

我在SQL Server 2005中有一個大表,佔用大約3.5 GB的空間(根據sp_spaceused)。它有1000萬條記錄和幾個索引。SQL Server 2005:刪除列佔用的磁盤空間

我剛把一幫來自於它的列,使得記錄長度得到了降低到一半,讓我吃驚花了零時間來做到這一點。顯然,sp_spaceused仍報告相同的空間,SQL Server在刪除列時沒有做任何事情,除了將它們標記爲「已刪除」。

所以我搬到從這個表中的所有數據到另一個新表,截斷它,感動了所有的數據備份,因此它會得到所有的重建。

現在,在這之後,數據正​​在2.8 GB,這是比以前少了,但我期待一個更大的下降。

有沒有可能是事實,這臺原本這些列仍留下的東西嗎?

截斷它不夠?我是否應該放棄它並使用較小的色譜柱再次創建它?

或者數據真的是2.8 GB?

謝謝!

回答

2

你是怎麼計算出「預計會有更大的下降」的?請注意,數據有8K頁,這意味着即使單個行較小,這並不總意味着您需要較少的頁面來存儲它們。例如(一個極端的例子),如果你的行每次只有7.5K,每頁只能有一行。你刪除一些列,你的行是5K,但仍然是每頁一行。

4

您將需要重建聚簇索引(假設你有一個 - 默認情況下,你的主鍵是聚集鍵)。

ALTER INDEX (your clustered index) ON TABLE (your table) REBUILD 

的數據是真的是你的聚集索引的葉級 - 當你重建它,這將是「壓縮」和行應存放在少得多的數據頁,減少數據庫的大小了。

如果不能在所有幫助,你可能還需要你的數據庫上運行DBCC SHRINKDATABASE真正回收空間。這兩個步驟應該真的讓你得到一些更小的數據庫文件!

Marc

+0

而只是假設它是一個3.5GB的表,該操作將罰款與系統運行? – marquito 2013-04-02 17:30:08

相關問題