概念

数据库表的索引从数据存储方式上可以分为聚簇索引和非聚簇索引两种。“聚簇”的意思是数据行被按照一定顺序一个个紧密地排列在一起存储。我们熟悉的InnoDB和MyISAM两大引擎,InnoDB的默认数据结构是聚簇索引,而MyISAM是非聚簇索引。结构都是B+tree

InnoDB 存储引擎的主键使用的是聚簇索引,而非主键使用的称作:“辅助索引”、“二次索引”,而 MqISAM 存储引擎无论主键,还是非主键使用的索引都是一样的:“非聚簇索引”。

InnoDB 存储引擎

主键使用:聚簇索引

在 b+树索引的叶子节点上的 data 域里保存的就是对应行的全部数据。
InnoDB 主键索引的使用的就是聚簇索引。因此,被索引的列必须是主键列,如果没有主键,会选择一个唯一的非空索引代替,如果也没有这样的索引,那么会隐式定义一个主键来作为聚簇索引。一张表只有一个聚簇索引。

非主键使用:辅助索引、二次索引

b+树的叶子节点的 data 域保存了行的主键值,因此这种索引方式都需要“二次查找”,也就是说先通过辅助索引首先找到的主键值,再通过主键值去聚簇索引中查找对应的行数据。

MyISAM 存储引擎

主键,非主键:非聚簇索引

指 B+Tree 的叶子节点上的 data 域并不直接保存数据,而是数据的地址(其实也可以叫做指针)。并且 Myisam 引擎的主索引和辅助索引在结构上没有任何区别,唯一的区别是主索引要求 key 是唯一的,而辅助索引的 key 可以重复。

差异

image.png[

](https://blog.csdn.net/baidu_15952103/article/details/109234605)
[

](https://blog.csdn.net/baidu_15952103/article/details/109234605)