一般来说,我看到了两种确保表中没有重复行的简单方法。在表的所有列上添加唯一约束(在我的示例3中)创建一个主键id,它是其他列的散列后者将有更多的工作要落实。与3列相比,int主键是否提供了性能改进?或者mysql在内部检查唯一性时已经在列上使用了某种哈希吗?编辑:列的类型是int(11)、int(11)和datetime(6)
ecbunoof1#
索引中的字节数是有限的。例如,innodb将索引限制为767字节(如文档中所述)。因此,根据行的不同,可能无法在所有列上定义唯一索引或主键。实现哈希有两个缺点:哈希有冲突。因此,概率可能非常小(取决于哈希算法),但它确实存在。您需要添加哈希值,这通常意味着使用触发器。这一切都是可能的——插入/更新触发器也可以保证唯一性。不过,我的猜测是,并不需要对所有列都有唯一的约束。一些子集可能是合理的,以保证唯一性。如果它们是唯一的,那么整行就是唯一的。
1条答案
按热度按时间ecbunoof1#
索引中的字节数是有限的。例如,innodb将索引限制为767字节(如文档中所述)。因此,根据行的不同,可能无法在所有列上定义唯一索引或主键。
实现哈希有两个缺点:
哈希有冲突。因此,概率可能非常小(取决于哈希算法),但它确实存在。
您需要添加哈希值,这通常意味着使用触发器。
这一切都是可能的——插入/更新触发器也可以保证唯一性。
不过,我的猜测是,并不需要对所有列都有唯一的约束。一些子集可能是合理的,以保证唯一性。如果它们是唯一的,那么整行就是唯一的。