【发布时间】:2019-11-21 11:49:45
【问题描述】:
我有一个非常大的表(数以亿计的行),并且需要将唯一索引添加到该表的列中。我知道表确实包含该键上的重复值,我需要清理它们(通过删除行/将列的值重置为我可以自动生成的唯一值)。一个优点是已经复制的行不再被修改。
考虑到我可能会使用 Percona pt-osc 工具并且表上有连续的删除/插入,执行此类更改的正确方法是什么?我的计划是:
- 添加确保不再插入重复 ID 的代码。可能我需要为此临时添加一个单独的表,因为我希望数据库为我而不是应用程序强制执行此操作 - 所以将事务中的唯一索引与我的主表一起插入到“影子表”中,回滚所有尝试插入重复值的插入
- 通过删除所有无效列值来回填表,这些列值位于
$current_pkey_value下方的主键范围内 - 然后添加索引并使用pt-osc切换表
我有什么遗漏吗?
【问题讨论】:
标签: mysql unique-constraint percona