表使用太多磁盘空间

时间:2012-08-09 14:35:41

标签: sql-server sql-server-2008

当我在Sql Server Management Studio中运行“按表排列的磁盘使用率”报告时,它显示了一个使用大约1.8GB磁盘空间的表:

enter image description here

表格定义:

CREATE TABLE [dbo].[RecipeItems](
    [wo_id] [varchar](50) NOT NULL,
    [invent_id] [varchar](50) NOT NULL,
    [invent_dim_id] [varchar](50) NULL,
    [ratio] [float] NOT NULL
) ON [PRIMARY]

大致估计每行占用的字节少于200个字节,而且只有7K记录,这不应超过1-2MB。但显然,事实并非如此。这个表使用如此多的存储空间可能是什么原因?

1 个答案:

答案 0 :(得分:6)

有可能更新或删除了大量数据。由于它是堆更新可以导致转发记录。我先试试这个:

ALTER TABLE dbo.RecipeItems REBUILD;

接下来我会考虑添加聚集索引。

不要运行shrink database命令来修复此表,请PLEASE。

当你执行“删除全部和批量插入”时,我会这样做,在中间运行重建:

TRUNCATE TABLE dbo.RecipeItems;
ALTER TABLE dbo.RecipeItems REBUILD;
BULK INSERT dbo.RecipeItems FROM ...

如果添加聚簇索引,您可能希望以不同的方式执行此操作。如果你不能使用TRUNCATE,显然继续使用DELETE。如果表符合条件,TRUNCATE将减少日志流失,并且由于您正在擦除表并重新填充它,因此您似乎不需要从中恢复。实际上,您可能只是考虑放弃表并每次重新创建它。