我有一张包含24亿条记录的表格,我需要使用一些过滤器从该表格中删除大约5亿条记录。
这是我目前的查询:
SET ROWCOUNT 1000
delete_more:
DELETE FROM hwbss..tblsdr WHERE dst <= 123456444
IF @@ROWCOUNT > 0 GOTO delete_more
SET ROWCOUNT 0
删除记录需要花费大量时间。
问题是什么?如何加快删除速度。
答案 0 :(得分:0)
首先要将数据库恢复模型设置为简单。
ALTER DATABASE Database Name
SET RECOVERY SIMPLE
删除操作记录每行和每行的详细信息,因此随着日志的不断增长需要更多时间。
然后,禁用表中的约束和索引(如果有)。删除操作完成后,您可以重建索引。
替代方法:
您还可以将现有表格中的数据(500 M记录)插入到与现有表格同名的新表格中,但是在不同的模式中,例如Tmp.TableName
。然后,您可以删除现有表并使用
ALTER SCHEMA [SchemaName]
TRANSFER [Tmp].[TableName]