为大型MySQL表添加唯一约束

时间:2017-06-27 17:22:53

标签: mysql

我在MySQL 5.6上有一个InnoDB表,我想在VARCHAR列中添加一个唯一约束(让我们称之为x列)。非常简单,除了我有超过500万行,所以我想在开始之前预测任何问题。

具体问题:

  1. Ballpark估计需要多长时间?
  2. 我计划在开始之前删除x的重复值。但是,如果有人试图在添加约束的ALTER操作进行时为x插入非唯一值,那么会发生什么?
  3. ADD UNIQUEADD CONSTRAINT UNIQUEADD UNIQUE INDEX之间是否存在差异?
  4. 提前致谢。

2 个答案:

答案 0 :(得分:2)

只有一种方法可以确定需要多长时间,以及尝试它的方法。如果您正在处理生产系统,则无法离线,您需要从最新备份创建副本并尝试首先迁移。如果它在具有类似功能的硬件上并且负载较轻,就像您的数据库将在实际迁移期间一样,那么它应该给你一个想法。

如果此表非常关键,要执行此类迁移锁定表,您需要使网站脱机。在重复数据删除工作之前执行此操作。

通常UNIQUE INDEX是实现这些目标的方法,因为它也会自动施加约束。

答案 1 :(得分:0)

如果有副本,请使用幽灵迁移