SQL Server:更改列类型时表的双倍数据大小

时间:2011-06-09 06:43:06

标签: sql-server-2008 alter-column

我将列的类型更改为实际的较小类型:

-- 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中的表属性找到它所使用的空间:“MyTable - > Properties - > Storage - > Data space”。现在我怀疑这是数据使用的实际空间。

2 个答案:

答案 0 :(得分:2)

运行ALTER INDEX ALL On MyTable REBUILD,然后再次使用“true”标志

检查空格

基本上,类型的更改以某种方式存在碎片存储:例如,它现在是NULLable,并且之前不会影响磁盘上的结构。我选择了这个例子,因为你没有在ALTER TABLE中指定NULL / NOT NULL

答案 1 :(得分:0)

使用sp_spaceused,您可以获得有关表格使用空间的更多信息。

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