假设,在我的带有列的表中
id | email | name
1 | aa@aa.com | aa
2 | aa@aa.com | aaa
3 | bb@b.com | bb
假设我想删除重复的条目,最好的方法是什么?(如果存在多个条目,则保留第一个记录)。我的表也是 40GB+ / 数十亿条记录。
我们的选择是:
1)
ALTER IGNORE TABLE table_name ADD UNIQUE INDEX (email);
这甚至是不可想象的,因为我们 4 小时的停机时间是无法承受的。
2)
- 确定您必须使用 group by 删除的 id 并推送到临时表。
- 使用临时表内部连接基表并删除行
这将产生漏洞和性能问题。
3)我们所做的解决方案是,
- 使用插入忽略选项进行表转储(在从属设备上完成以减少负载)
- 将数据恢复到 diff DB
- 用重命名表交换了两个表
- 增量数据更改也被复制(我们这里有停机时间)这可以通过几分钟的停机时间来完成。它对我有用,因为表上没有更新(我们只有插入)。
如果还支持更新,最好的解决方案是什么。我的主要限制是停机时间?
也许我可以通过启用更新查询(包括表)的日志来扩展 3,并在恢复后运行相同的日志。
有更好的方法吗?