加速使用聚集索引的大表的删除操作

加速使用聚集索引的大表的删除操作

我需要从 Microsoft SQL Server 2005 数据库上庞大的非分区表中删除大量记录。表包含大约 8.388.483.218 条记录,我需要删除其中的 1.069.012.556 条。由于 tlog 的磁盘空间不足,并且我想逐步删除它们以避免性能问题,因此我使用以下查询:

WHILE 1=1 BEGIN 
WITH EventsTop1000 AS (SELECT TOP(100000) * FROM [MYTABLE] WHERE [timestamp] < CONVERT  (DATETIME, '2008-07-01 00:00:00', 102)) DELETE EventsTop1000 
IF (@@ROWCOUNT = 0) BREAK;
END 

它运行非常慢,如果可能的话我需要加快速度。执行计划显示,大约 62% 用于删除聚集索引步骤,另外 33% 用于删除非聚集索引(表有两个索引)。有什么想法吗?删除索引,然后重建索引怎么样?

答案1

尝试这样的事情:-

设置行数 100000

从 [mytable] 中删除,其中 [timestamp] < CONVERT (DATETIME, '2008-07-01 00:00:00', 102) go 1000

这样做可以消除日志记录负载,因此 LDF 文件不会变得太大(假设简单日志记录)。

相关内容