sql—在mysql的所有列上添加唯一约束的代价有多大

ljo96ir5  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(411)

一般来说,我看到了两种确保表中没有重复行的简单方法。
在表的所有列上添加唯一约束(在我的示例3中)
创建一个主键id,它是其他列的散列
后者将有更多的工作要落实。与3列相比,int主键是否提供了性能改进?或者mysql在内部检查唯一性时已经在列上使用了某种哈希吗?
编辑:列的类型是int(11)、int(11)和datetime(6)

ecbunoof

ecbunoof1#

索引中的字节数是有限的。例如,innodb将索引限制为767字节(如文档中所述)。因此,根据行的不同,可能无法在所有列上定义唯一索引或主键。
实现哈希有两个缺点:
哈希有冲突。因此,概率可能非常小(取决于哈希算法),但它确实存在。
您需要添加哈希值,这通常意味着使用触发器。
这一切都是可能的——插入/更新触发器也可以保证唯一性。
不过,我的猜测是,并不需要对所有列都有唯一的约束。一些子集可能是合理的,以保证唯一性。如果它们是唯一的,那么整行就是唯一的。

相关问题