刚刚在浏览percona的网站的时候,看到percona的开发者与读者有下面一段对话,我觉得在mysql数据库设计阶段,这段小对话会有很大的借鉴意义,我觉得如果你比较在意性能的话,还是不要用varchar作为主键。
很有借鉴意义的对话哦
读者问: 能否选择用varchar作为innodb的PRIMARY KEY? 假如varchar用作innodb表的主键列它的有长度是否有限制? 有人建议用md5或者uuid来代替int和bigint作为innodb的主键。
percona的开发者回答: varchar在比较的时候很慢,它使用字符集和排序代码一次一个字节地比较;它跟整型不一样的地方,整型比较可以直接通过cpu比较。而且md5和uuid是非常大随机字符串,导致主键非常大,所有的二级键也会变得非常大。(注:对于InnoDB而言,即便是查询也选择主键索引,辅助索引(secondary index)可能会覆盖所选列,因为InnoDB将主键值存储在每个辅助索引中)
对于程序员来说使用varchar作为主键可能是会有一些方便,但是对于innodb来说确实非常糟糕。。当然使用什么类型的字段作为主键,还是要根据具体的需求而定,我个人不推荐varchar。
| 留言与评论(共有 0 条评论) |