阅文时长 | | 0.6分钟 | 字数统计 | | 963.2字符 |
主要内容 | | 1、引言&背景 2、Delete删除法 3、提取回写删除法 4、声明与参考资料 | ||
『MSSQL·大数据量历史数据清理的思路』 | |||
编写人 | | SCscHero | 编写时间 | | 2021/7/15 PM10:45 |
文章类型 | | 系列 | 完成度 | | 已完成 |
座右铭 | 每一个伟大的事业,都有一个微不足道的开始。 |
一、引言&背景 完成度:100%
a) 应对问题
面对上亿级别的数据量的删除/迁移时,删除时间往往非常长,是否有更高效的做法?
b) 应对场景
大数据量迁移/删除时(如海量历史数据删除),需要高效的清理手段。
c) 解决原理&方法
- Delete删除法:适用于删除小数据量的数据(个人认为适用于删除数据量在200万以下)。
- 有效数据提取,回写删除法:(个人认为适用于删除数据量远大于保留数据量,比例在2:8的情况可以考虑。如总量1亿的数据表,有9000万无效数据,1000万有效数据。)
二、Delete删除法 完成度:100%
Delete删除语句,T-SQL基础了。简单带过。
--基本语法
DELETE [DBName].[TableName] WHERE [Column]='XXXX'
三、提取回写删除法 完成度:100%
a) 主要思路
- 先写好查询语句,将准备提取的有效数据提取到另一张表。
- TRUNCATE原表,在GUI界面删除主键约束及自增属性。
- 将有效数据插回到原表中,设定好原来的主键约束及自增属性。
b) 常见Q&A
- 为什么要在GUI界面删除主键约束及自增属性。
目前由于更改自增属性,MSSQL底层处理逻辑使用T-SQL实现较为复杂,因此使用GUI界面更改的方式。如遇到"阻止保存要求重新创建表的更改配置"等窗口,点击传送门。 - 在有效数据插回到原表后,设置主键及自增属性,为什么那么慢?
因为MSSQL对数据表结构更改底层的处理是新建一个临时表,设定为自增主键,把数据插入再插回这一系列操作,所以理论上数据量越大,速度则越慢。如遇超时问题,点击传送门。 - 对于自增列问题使用,设置为"允许显式插入自增列"是否可行?
在数据回写的时候也尝试过此问题,但即使开启了允许显式插入自增列,还是要报需要开启...。因此最简单的方式是关闭自增属性。
SET IDENTITY_INSERT [tablename] ON
四、声明与参考资料 完成度:100%
原创博文,未经许可请勿转载。
如有帮助,欢迎点赞、收藏、关注。如有问题,请评论留言!如需与博主联系的,直接博客私信SCscHero即可。