mysql 存在两种储存引擎,分别是innodb和myisam。引擎的不同,导致了实现索引的方式的不同。

myisam的索引结构也是采用b+树结构,叶子节点储存的是数据记录地址。其主索引和辅助索引的结构基本一致,区别就是主索引的key不能重复。数据搜索过程是,按照b+树的搜索算法,如果找到key,就找到data域中的地址,然后读取数据记录。

innodb的索引结构也是采用b+树结构,叶子节点储存的是数据记录,或者说数据文件本身就是主索引文件。数据搜索流程是,先通过辅助索引找到主键,然后根据主键查询主索引,找到data域中的数据记录。

所以innodb必然包含一个主索引。

innodb的数据搜索流程,决定了最适合的主键方式是,自增字段作为主键。其避免了数据记录新增时,主索引文件频繁的分裂调整。