假设我有一个包含3个varchar(256)列的复合主键的表:a、B和C。B上还有一个索引,复合键充当a上的索引。这个表有数百万行,有很多INSERTSSELECTS,但没有UPDATES(除了与ON DUPLICATE KEY UPDATE一起使用INSERTS)。
如果我将此表更改为具有md5(a,B,C)的单列char(32)主键(以及a上的索引和B上的索引),那么此设置对于插入是否更有效?碰撞的可能性并不困扰我。
MySQL 5.5,使用InnoDB

最佳答案

在InnoDB中,主键是一个集群键——磁盘上的数据是根据PK的顺序进行物理组织的。这意味着,如果您不使用自动增量或其他随时间增加PK值的方法,您将得到大量随机写入,一旦表的大小大于缓冲池大小,这将扼杀您的性能。
考虑到这一点,md5()不会比插入的复合索引好多少。较小的PK有两个好处:PK的大小影响所有二级索引的大小(因为所有二级索引都包含PK),使用较小的索引更好(因为您可以一次将更多的值加载到内存中)

关于mysql - MySQL InnoDB:具有多列键与单个md5哈希键,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17007461/

10-13 01:24