首先,要知道Mysql中有两种索引方式,hash索引和btree索引,其中,聚簇索引或非聚簇索引是btree索引的一种存储方式。

B+树

然后,要知道什么是btree(B+)树的存储结构,B+树是一种平衡多路查找树,所有的非叶子节点不存储数据。

  • B+树的叶子节点以单链表的形式链接在一起,方便查找。
  • B+树的数据只存储在叶子节点,非叶子节点只存储键值。

关于Mysql为什么使用B+树作为索引,请参考这里

聚簇索引

Mysql聚簇索引

聚簇索引指的是为每张表的主键构建一个B+树,其中存储数据的叶子节点不光存储索引值,同时存储索引值所对应的整行记录,每张表只能有一个聚簇索引。

所以当查询主键所对应的数据行时,直接从B+树取出即可,不需要回表查询,只查询1次即可。

Innodb使用的是聚簇索引。

非聚簇索引

Mysql非聚簇索引

非聚簇索引与聚簇索引正好相反,它存储的是索引值所对应的key值。

所以当查询主键所对应的数据行时,需要回表查询,即查询2次。

MyISAM使用的是非聚簇索引。