Sql Server 千万级数据量删除

来源:互联网 发布:如何将mac的日历退出 编辑:程序博客网 时间:2024/04/28 18:53

公司有套非常老的系统,数据库是MSSQL server 2005,积累了15年的历史数据,大概有2000多万行,由于业务原因,需要清除14年以前的历史数据,由于数据量本身比较大,删除非常缓慢,从网上找到了一些解决方案。

1)备份清日志
2)日期字段要有索引
3)统计下要删除的记录数,最小的日期
4)从最小的日期开始,按月/周/天分段删除,尽量把分段数据量控制在千数量级,一次性删太多锁就多了。
5)备份清日志

declare @mydate date,@int int 
select @mydate=min(orderdate) from tablename 
--tmp_table 是自己建立的控制表。只有一行一列,初始是1。
select @int =int from tmp_table 
while  @mydate <'2010-01-01' and @int =1
begin 
delete tablename  where orderdate=@mydate 
set @mydate=dateadd(day,1,@mydate)
end 

bjkfp.zzwqfp.com

我试尝这的方法,每次删除1000条记录

把需要删除的数据主键插入临时表
SELECT ID INTO ##DEL_TMP_tb FROM TB 
WHERE ...

CREATE CLUSTERED INDEX IDX_ID ON ##DEL_TMP_tb(ID)
CREATE TABLE #TMP_BATCH(ID BIGINT)

WHILE EXISTS (SELECT TOP 1 1 FROM ##DEL_TMP_tb)
BEGIN 
DELETE FROM  #TMP_BATCH
--每个batch 1000条
INSERT INTO #TMP_BATCH
SELECT TOP 1000 ID FROM ##DEL_TMP_tb
--删除数据
        DELETE FROM  TB WHERE ID IN (SELECT ID FROM #TMP_BATCH)
DELETE FROM ##DEL_TMP_tb WHERE ID IN (SELECT ID FROM #TMP_BATCH);
       --- waitfor delay '00:00.00.050'   
END

DROP TABLE ##DEL_TMP_tb
DROP TABLE #TMP_BATCH

0 0
原创粉丝点击