mysql具体的存储结构与引擎相关,目前使用较多的是Innodb。
1.主键索引
Innodb如果没有指定主键则会默认分配一个uid作为主键。数据存储时以主键为key,生成B+Tree,其中叶子节点存储数据。因为每个Innodb表都会存在以主键为索引。
2.非主键索引
指定非主键为索引时,也会生成B+Tree,此时叶子节点为数据的key,根据key去主键的Tree进行二次查找。
3.总结:
由此引发几条原则:
1)主键不易过长,否则非主键索引会比较大。
2)主键最好单调,提高B+Tree的更新效率
4.与MyIsam对比
MyIsam的索引与innodb的非主键索引类似,只是叶子节点为数据的地址值。