此文章发布于60
个月前,部分信息可能已经过时
,请自行斟酌确认。
当删除一个数据量在千万及以上
的大表中的部分数据时,使用 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
,可根据实际情况调整。
alter database dbname set recovery simple
declare @count int
set @count=1
print convert(varchar(50),getdate(),120)
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 2while @count>0
begin
end
print '删除完成'
alter database dbname set recovery full
谢谢,恢复模式改为简单,不记录日志,提高速度。