MyISAM:数据和索引没有放在一块,叫做 非聚集索引,不可能回表
InnoDB:数据和索引存放在一块,叫聚集索引 ,会涉及回表
此时假设一个场景:uid是主键,有主键索引树,name有索引,创建二级索引树
当前场景下的主键索引树如下,B 树非叶子节点上只有索引值,叶子节点上有索引值和数据地址
MyISAM索引树原理图如下:
当前场景下的二级索引树如下:
InnoDB二级索引树叶子节点上是主键值uid,而MyISAM存的则是数据的地址
当前场景下,主键索引树和二级索引树两者之间的联系:
在MyISAM中,主索引和辅助索引(Secondary key)在结构上没有任何区别,只是主索引要求key是唯一的,而辅助索引的key可以重复,MyISAM二级索引树结构图如下:
当前场景下,若使用MyISAM存储引擎查找数据,以name作为索引,到二级索引树上查找结果(构造索引树的过程也涉及磁盘I/O),如果指定的Key存在,则取出其data域的值,然后以data域的值为地址,读取相应数据记录。
MyISAM存储引擎,B 树叶子节点存储关键字和数据地址,也就是说索引关键字和数据没有在一起存放,体现在磁盘上,表的数据存放在*.MYD
文件中,表的索引存放在*.MYI
文件中。