SQLServer数据库千万级数据量删除
小标 2018-07-06 来源 : 阅读 108 评论 0

摘要:本文主要向大家介绍了SQLServer数据库千万级数据量删除,通过具体的内容向大家展现,希望对大家学习SQLServer数据库有所帮助。

本文主要向大家介绍了SQLServer数据库千万级数据量删除,通过具体的内容向大家展现,希望对大家学习SQLServer数据库有所帮助。

公司有套非常老的系统,数据库是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

以上就介绍了SQL Server的相关知识,希望对SQL Server有兴趣的朋友有所帮助。了解更多内容,请关注职坐标数据库SQL Server频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论
X
免费获取海同IT培训资料
验证码手机号,获得海同独家IT培训资料
获取验证码
提交

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号