7Jun 删除运行中服务器中的过期数据 Jun 07, 2021 By 余钊 1332 Views 0 Comments 实验目的 今天遇到一个问题,如果数据表中有大量数据,并且不能影响插入操作,该怎么办。 实验过程 1.比如原表是myorder1,有一亿条数据,想删除某个日期之前的数据,日期顺序和聚集索引顺序一致。 2.创建一张myorder1_backup表,仅仅只存储myorder1的聚集索引id。 3.写一个程序,定时执行下面的语句。首先判断第一条日期是否满足条件(这种方法有一个弊端,可能会多删除数据,如果要保证数据准确,需要循环检查这10000条数据是否都满足条件,达到精准过滤),满足条件就将原表的头1万条数据id放到临时表,然后利用myorder1的聚集索引从myorder1_backup筛选数据来删除数据,然后清空临时表myorder1_backup。 declare @count int set @count=0 while(@count<3) begin --等待5秒 select getdate() waitfor delay '00:00:02:00' --每次删除1万条数据,分摊压力 --查询第一条数据的日期,满足条件就执行下面语句 --将数据插入临时表 insert into myorder1_backup (id) SELECT top 10000 id FROM myorder1 with(nolock) order by id --从主表删除数据 delete FROM myorder1 where id in (select id from myorder1_backup) --清除临时表 truncate table myorder1_backup --查看主表数据量 select count(1) from myorder1 set @count=@count+1 end 转载请注明出处: http://bluesd7.com/蓝影闪电的随笔/ContentId/417/删除运行中服务器中的过期数据 标签: SQL Server, SQL 分类: SQL Server, SQL 数据库, 闪电实验室, 数据库, 原创