从表sql server中删除数百万条记录



我有一个有24亿条记录的表,我需要使用一些过滤器从该表中删除大约5亿条记录。

到目前为止,这是我的疑问:

SET ROWCOUNT 1000
delete_more:
DELETE FROM hwbss..tblsdr WHERE dst <= 123456444
IF @@ROWCOUNT > 0 GOTO delete_more
SET ROWCOUNT 0

删除记录需要花费大量时间。

问题出在哪里?如何加快删除速度。

首先要将数据库恢复模型设置为简单的。

ALTER DATABASE Database Name
SET RECOVERY SIMPLE

删除每一行的操作日志详细信息,因此随着日志的不断增长,会花费更多时间。

然后,禁用表上的约束和索引(如果有的话)。删除操作完成后,可以重新生成索引。

备用方法:

您还可以将除500M条记录之外的现有表中的数据插入到与现有表同名但使用不同模式的新表中,例如Tmp.TableName。然后,您可以删除现有的表,并使用更改Tmp表的模式

ALTER SCHEMA [SchemaName]
TRANSFER [Tmp].[TableName]

最新更新