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.但显然,事实并非如此.这个表使用如此多的存储空间可能是什么原因?
有可能更新或删除了大量数据.由于它是堆更新可以导致转发记录.我先试试这个:
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将减少日志流失,并且由于您正在擦除表并重新填充它,因此您似乎不需要从中恢复.实际上,您可能只考虑删除表并每次重新创建它.
| 归档时间: |
|
| 查看次数: |
2689 次 |
| 最近记录: |