摘要:本文主要向大家介绍了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频道!
您输入的评论内容中包含违禁敏感词
我知道了
请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号