有个数据库有200W条数据。需要给这个表去重。
操作
方法1:
我整理了一下逻辑:
- 创建一个和A表一模一样的B表。
- 将A表的数据去重,导入到B表。
- 将A表进行更名。
- 将B表更名为A表。
方法2
- 将A表数据导出成为sql/csv等格式
- 然后建立一个新表B进行导入
- 将A表更名为C
- 将B表更名为A
问题
- 方法1 insert的时候会引入渐进锁,最后会导致整个表锁表。如果数据量过大锁表的时间也会很久。需要按照一个可区分字段进行区分。第二个方式不会引入锁表,但是无事务导致数据和时间点有一定的差异,会丢失一部分数据
- 新建的表需要继承上一个表的索引,不然会导致查询缓慢
- 线上进行大表更替风险和收益不成正比,很容易导致一些不可逆的后果;有实际业务,影响计费、流量、采集等重要参数,建议重复值留着。对测试环境可以操作
但是:这个速度是真的快。
手快一点,基本上十分钟完事。