MSSQL·大数据量历史数据清理的思路

阅文时长 | 0.6分钟 字数统计 | 963.2字符
主要内容 | 1、引言&背景 2、Delete删除法 3、提取回写删除法 4、声明与参考资料
『MSSQL·大数据量历史数据清理的思路』
编写人 | SCscHero 编写时间 | 2021/7/15 PM10:45
文章类型 | 系列 完成度 | 已完成
座右铭 每一个伟大的事业,都有一个微不足道的开始。

一、引言&背景   完成度:100%

a) 应对问题

面对上亿级别的数据量的删除/迁移时,删除时间往往非常长,是否有更高效的做法?

b) 应对场景

大数据量迁移/删除时(如海量历史数据删除),需要高效的清理手段。

c) 解决原理&方法

  1. Delete删除法:适用于删除小数据量的数据(个人认为适用于删除数据量在200万以下)。
  2. 有效数据提取,回写删除法:(个人认为适用于删除数据量远大于保留数据量,比例在2:8的情况可以考虑。如总量1亿的数据表,有9000万无效数据,1000万有效数据。)

二、Delete删除法   完成度:100%

Delete删除语句,T-SQL基础了。简单带过。

--基本语法
DELETE [DBName].[TableName] WHERE [Column]='XXXX'

三、提取回写删除法   完成度:100%

a) 主要思路

  1. 先写好查询语句,将准备提取的有效数据提取到另一张表。
  2. TRUNCATE原表,在GUI界面删除主键约束及自增属性。
  3. 将有效数据插回到原表中,设定好原来的主键约束及自增属性。

b) 常见Q&A

  1. 为什么要在GUI界面删除主键约束及自增属性。
    目前由于更改自增属性,MSSQL底层处理逻辑使用T-SQL实现较为复杂,因此使用GUI界面更改的方式。如遇到"阻止保存要求重新创建表的更改配置"等窗口,点击传送门
  2. 在有效数据插回到原表后,设置主键及自增属性,为什么那么慢?
    因为MSSQL对数据表结构更改底层的处理是新建一个临时表,设定为自增主键,把数据插入再插回这一系列操作,所以理论上数据量越大,速度则越慢。如遇超时问题,点击传送门
  3. 对于自增列问题使用,设置为"允许显式插入自增列"是否可行?
    在数据回写的时候也尝试过此问题,但即使开启了允许显式插入自增列,还是要报需要开启...。因此最简单的方式是关闭自增属性。
SET IDENTITY_INSERT [tablename] ON

四、声明与参考资料   完成度:100%

原创博文,未经许可请勿转载。

如有帮助,欢迎点赞、收藏、关注。如有问题,请评论留言!如需与博主联系的,直接博客私信SCscHero即可。

原文地址:https://www.cnblogs.com/SCscHero/p/15026158.html