我有一个非常大的表(数十亿行),并且需要将UNIQUE索引添加到该表的列中。对于一个事实,我知道该表确实包含该键上的重复值,我需要清理(通过删除行/将列的值重置为可以自动生成的唯一值)。一个优点是,已经重复的行不再被修改。
鉴于我可能将使用Percona pt-osc工具并且表上存在连续的删除/插入操作,执行这样的更改的正确方法是什么?我的计划是:
$current_pkey_value
以下主键范围内的所有无效列值来回填表格有什么我想念的吗?
答案 0 :(得分:0)
这是我们决定解决它的方式。
由于我们使用pt-online-schema-change
,因此我们使用触发器来执行从现有表到临时表的同步。该工具为此实际上有一个特殊的配置密钥--no-check-unique-key-change
,它将完全满足我们的需要-同意执行ALTER TABLE并设置触发器,以使发生冲突时,INSERT .. IGNORE
将被应用,并且在同步过程中,使用现在唯一值的第一行将在插入中获胜。对我们来说,这是一个很好的权衡,因为我们看到的所有重复项都是由于数据争夺而不是价值生成过程中的实际冲突而产生的。
我不能说通过这种方式投票很高兴。我怀疑所有拒绝投票的人都会在第一次迭代时就设计出完美的音调表(并且神奇地仅在表设计从一开始就在所有正确的位置具有唯一索引的项目中工作)。