2013-07-23 57 views
1

在SQL Server 2008 R2中將列上的varchar限制從512更改爲max之後,我注意到表的文件大小增加了一倍多。我沒有想到它會增加這麼多,但是由於我增加了它,我認爲這是有道理的。所以我嘗試將它改爲2500的更合理限制,以便發現我的表的大小再次以文件大小加倍(現在超過原來的4倍)。爲什麼我的表文件大小在更改列後會加倍?

唯一索引是主鍵,這是我跑的腳本:

ALTER TABLE dbo.Notes 
ALTER COLUMN [note] VARCHAR(MAX) NULL 

它是什麼,我不理解?

回答

1

對於相同的數據集,varchar(max)不應占用比varchar(2500)更多的空間。

也許SQL Server在修改表時需要臨時空間?嘗試重建你的表(我假設你的主鍵是集羣):

alter index NameOfPrimaryKey on dbo.Notes rebuild 

而在此之後再次檢查表數據使用。

+0

完美的工作!謝謝。 –

1

varchar(max)未存儲在行內。它存儲在不同的位置。原始行有一個指向varchar(max)數據位置的指針。 因此,如果將數據類型從varchar(512)更改爲varchar(max),期望表大小增長是很自然的。

如果你想保持數據類型varchar(max)並避免數據存儲在單獨的文件中,那麼嘗試一個配置,保持與行內聯的特定長度的變量。

以上所有解釋並不能解釋獲得4倍的表格大小,因此請按照上面的建議重新構建您的主索引。

相關問題