首先咱们知道MyISM和InnoDB索引都是由B+树实现的,但在索引管理数据方式上却有所不一样。spa
InnoDB是汇集索引,数据文件是和(主键)索引绑在一块儿的,即索引 + 数据 = 整个表数据文件,经过主键索引到整个记录,必需要有主键,经过主键索引效率很高。可是辅助索引须要两次查询,由于辅助索引是以建索引的字段为关键字索引到主键,因此须要两次,先查询到主键,而后再经过主键查询到数据。所以,主键不该该过大,由于主键太大,其余索引也都会很大。话很少说上图:指针
主键索引:以主键索引到整条记录blog
辅助索引:以另外一字段索引到主键索引
MyISAM是非汇集索引,也是使用B+Tree做为索引结构,索引和数据文件是分离的,索引保存的是数据文件的指针。主键索引和辅助索引是独立的。也就是说:InnoDB的B+树主键索引的叶子节点就是数据文件,辅助索引的叶子节点是主键的值;而MyISAM的B+树主键索引和辅助索引的叶子节点都是数据文件的地址指针。rem
主键索引:以关键字索引到记录的地址it
辅助索引:以某字段索引到记录地址class
从索引实现方面咱们也能够看出来InnoDB表数据文件自己就是索引文件,他们是一个总体,而对于MyISAM来讲数据文件和索引文件则是分开的。效率