SQL Server 分批删除大量数据

当删除一个数据量在千万及以上的大表中的部分数据时,使用 delete from 表名 where 条件;删除记录时执行的时间会比较长,日志文件急速增长,通过以下分批删除的方式可以稍微好一点。

--分批删除大量数据
declare @count int
set @count=100000 --每批删除的记录数

print convert(varchar(50),getdate(),120)
while 1=1
begin
     delete top(@count) from KHData_History where DataTime >'2019/12/08';
     if (@@rowcount<@count) break;

     print convert(varchar(50),getdate(),120)
     WaitFor DELAY '00:00:02' --等待几秒再继续
end
print '删除完成'

说明:@count 为每次删除的数据量,此处设置10w,可根据实际情况调整。

最后修改:2019 年 12 月 12 日 11 : 44 AM
如果觉得我的文章对你有用,请随意赞赏

2 条评论

  1. .

    alter database dbname set recovery simple

    declare @count int
    set @count=1

    print convert(varchar(50),getdate(),120)
    while @count>0
    begin

    begin transaction delete top(100000) from KHData_History where DataTime >'2019/12/08'; set @count=@@rowcount print convert(varchar(50),getdate(),120) commit transaction checkpoint 2

    end
    print '删除完成'

    alter database dbname set recovery full

    1. ifu25
      @.

      谢谢,恢复模式改为简单,不记录日志,提高速度。

发表评论