2

当我在 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。但显然,事实并非如此。这张表使用这么多存储空间的原因可能是什么?

4

1 回答 1

7

很可能很多数据已被更新或删除。由于它是一个堆更新可以导致转发记录。我会先试试这个:

ALTER TABLE dbo.RecipeItems REBUILD;

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

请不要运行收缩数据库命令来修复此表。

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

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

如果您添加一个聚集索引,您可能希望以不同的方式执行此操作。如果您不能使用 TRUNCATE,请继续使用 DELETE,很明显。如果表符合条件,TRUNCATE 将导致更少的日志流失,并且由于您正在清除表并重新填充它,因此您似乎不需要从中恢复。事实上,您可能只是考虑删除表并每次重新创建它。

于 2012-08-09T14:40:04.433 回答