表使用太多磁盘空间

Ere*_*mez 2 sql-server sql-server-2008

当我在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]
Run Code Online (Sandbox Code Playgroud)

粗略估计,每行只需不到200个字节,只有7K记录,这不应超过1-2MB.但显然,事实并非如此.这个表使用如此多的存储空间可能是什么原因?

Aar*_*and 6

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

ALTER TABLE dbo.RecipeItems REBUILD;
Run Code Online (Sandbox Code Playgroud)

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

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

当你执行"删除所有和批量插入"时,我会这样做,在中间运行重建:

TRUNCATE TABLE dbo.RecipeItems;
ALTER TABLE dbo.RecipeItems REBUILD;
BULK INSERT dbo.RecipeItems FROM ...
Run Code Online (Sandbox Code Playgroud)

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