MySQL InnoDB:具有多列密钥与单个md5哈希密钥

时间:2013-06-09 07:37:11

标签: mysql innodb mysql-5.5

假设我有一个包含3个varchar(256)列的复合主键的表:A,B和C. B上还有一个索引,复合键作为A的索引。这个表有数百万行,有很多INSERTSSELECTS,但没有UPDATESON DUPLICATE KEY UPDATEINSERTS一起使用除外)。

如果我将此表更改为具有md5(A,B,C)的单个列char(32)主键(以及A上的索引和B上的索引),则此设置对于INSERTS更有效?碰撞的可能性并没有打扰我。

MySQL 5.5,使用InnoDB

1 个答案:

答案 0 :(得分:1)

在InnoDB中,主键是群集密钥 - 磁盘上的数据是根据PK的顺序进行物理组织的。这意味着如果你没有使用自动增量或其他一些随着时间的推移增加PK值的东西,你会得到很多随机写入,一旦表的大小大于buffer_pool,这将会破坏你的性能大小

考虑到这一点,md5()不会比插入的复合索引好多少。具有较小的PK有两个原因:PK的大小影响所有二级索引的大小(因为所有二级索引都包含PK)并且使用较小的索引更好(因为您可以一次将更多的值加载到内存中)< / p>