2011-06-09 60 views
1

當我改變一列的類型中,以實際較小的類型:SQL服務器:一臺雙數據大小改變列類型

-- change type from nvarchar(100) to varchar(50) 
Alter Table [MyTable] Alter column [MyColumn] varchar(50) 

表包含4 Mio.記錄。在使用大約1.1 GB的空間之前,在更改列之後,它使用了2.2 GB的空間。這有什麼解釋嗎?

我找到了SMO使用的空間,或者通過查看sql server management studio中的表格屬性:「我的表 - >屬性 - >存儲 - >數據空間」。現在我懷疑這是數據使用的實際空間。

回答

2

運行ALTER INDEX ALL On MyTable REBUILD,然後用「真」標誌

基本上,在類型的變化已經支離破碎存儲再次檢查空間莫名其妙:比如現在可爲空,這是沒有影響的前磁盤上的結構。我選擇這個例子是因爲你沒有在你的ALTER TABLE中指定NULL/NOT NULL

+0

就是這樣。重建索引後,它回到1.1 GB。桌子碎裂時使用的空間變得更高,這仍然很有趣。我相信這是衡量表中數據量的一種方式,但它更多地說明它在磁盤上佔用了多少空間。 – 2011-06-09 11:40:34

+0

@Stefan Steinegger:正確,它分配了空間。數據類型的改變可能無法確定每8k頁面(頁面密度)的行數可能如何,因此您在磁盤上具有相同的結構。你所擁有的只是每頁中的數據略少。 – gbn 2011-06-09 11:48:13

0

使用sp_spaceused,您可以獲取有關表格使用空間的更多信息。

EXEC sp_spaceused @objname = N'dbo.MyTable' ,@updateusage = N'TRUE'; 
+0

相同:它顯示的數據大小爲2307256 KB,索引大小爲788488 KB。 – 2011-06-09 11:16:53