MyISAM和InnoDB的索引区别

1、区别汇总

一是主索引的区别,InnoDB的数据文件本身就是索引文件。而MyISAM的索引和数据是分开的。

二是辅助索引的区别:InnoDB的辅助索引data域存储相应记录主键的值而不是地址。而MyISAM的辅助索引和主索引没有多大区别。

2、 MyISAM索引实现

MyISAM索引文件和数据文件是分离的,索引文件仅保存数据记录的地址。

(1)主键索引

MyISAM索引文件和数据文件是分离的,索引文件仅保存记录所在页的指针(物理位置),通过这些地址来读取页,进而读取被索引的行。见下图:

è¿éåå¾çæè¿°

(2)二级索引

二级索引跟主键索引实现方式相同,都是保存数据的地址。

3、InnoDB索引的实现

(1)主键索引

InnoDB 存储引擎采用“聚集索引”的数据存储方式实现B-Tree索引,所谓“聚集”,就是指数据行和相邻的键值紧凑地存储在一起。在InnoDB中,表数据文件本身就是按B+Tree组织的一个索引结构,这棵树的叶节点data域保存了完整的数据记录。这个索引的key是数据表的主键,因此InnoDB表数据文件本身就是主索引。见下图:

è¿éåå¾çæè¿°

(2)二级索引

而对于二级索引,InnoDB采用的方式是在叶子页中保存主键值,通过这个主键值来回表(上图)查询到一条完整记录,因此按辅助索引检索实际上进行了二次查询。

è¿éåå¾çæè¿°

你可能感兴趣的:(数据库)