有人可以解释我在SQL Server 2005中看到的一些行为吗?
我的任务是减小尺寸或我们的数据库。
该表包含近600万条记录,我将行大小计算为1990字节。我拿了一份表的副本,并通过各种技术将行大小减少到803字节。
当我将原始表的数据大小(右键单击属性或sp_spaceused)与新表进行比较时,我看到只保存了21.7 MB。这远远不是我所期待的。
以下是我计算行大小的方法: 如果列是数字/十进制,那么我使用MSDN大小(http://msdn.microsoft.com/en-us/library/ms187746.aspx),对于我使用syscolumns.length的其他所有内容。如果列可以为空,我添加了一个额外的字节。
以下是我实施的一些更改。
从这一点来看,我的计算显示行减少了60%,而对于6M行表,我预计会节省超过21MB。它从2,762,536 KB下降到2,740,816 KB。
有人可以向我解释一下这种行为吗?
P.S。这没有考虑任何索引。
答案 0 :(得分:3)
问题是更改表格不会回收任何空间。删除列只是合乎逻辑的,列是隐藏,而不是删除。修改列类型通常会导致添加新列并隐藏前一列。所有这些操作增加表的物理大小。要回收'真实'空间,您需要重建表格。使用SQL 2008及更高版本,您将发出ALTER TABLE ... REBUILD
。在SQL 2005中,您可以发出DBCC REINDEX(table)
。
答案 1 :(得分:0)
我认为您需要在表上重建聚集索引。