在所有列mysql上添加唯一约束的成本是多少

时间:2018-06-04 04:28:36

标签: mysql sql

通常,我会看到两种简单的方法来确保表中没有重复的行。

  1. 在表的所有列上添加UNIQUE约束(在我的情况下为3)
  2. 创建主键ID,这是其他列的哈希值
  3. 后者将更多地实施。它是否提供了比较int主键而不是3列的性能改进?或者,当mysql检查唯一性时,内部是否已在列上使用某种哈希值?

    编辑:列的类型是int(11),int(11)和datetime(6)

1 个答案:

答案 0 :(得分:2)

索引中的字节数是有限的。例如,InnoDB将索引限制为767字节(如documentation中所述)。因此,根据您的行,您可能无法在所有列上定义唯一索引或主键。

实现哈希有两个缺点:

  • 哈希有碰撞。因此,概率可能非常小(取决于散列算法),但确实存在。
  • 您需要添加哈希值,这通常意味着使用触发器。

这一切都是可能的 - 插入/更新触发器也是如此,以保证唯一性。

我的猜测是,您不需要对所有列的唯一约束。某些子集可能是合理的,以保证唯一性。如果它们是独一无二的,那么整行就是独特的。