当我在Sql Server Management Studio中运行“按表排列的磁盘使用率”报告时,它显示了一个使用大约1.8GB磁盘空间的表:
表格定义:
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。但显然,事实并非如此。这个表使用如此多的存储空间可能是什么原因?
答案 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将减少日志流失,并且由于您正在擦除表并重新填充它,因此您似乎不需要从中恢复。实际上,您可能只是考虑放弃表并每次重新创建它。