目录
-
- 一、聚簇索引(主键索引)和非聚簇索索引(非主键索引)区别
-
- 1.1、聚簇索引(主键索引)和非聚簇索索引(非主键索引)结构图解
- 1.2、从主键和非主键方面理解区别
-
- 1.2.1、从主键方面理解
- 1.2.2、从非主键方面理解
- 1.3、从存储引擎方面理解区别
- 二、聚簇索引和非聚簇索引的总结
-
- 三、主键索引和非主键索引的总结
-
- 3.1、聚集索引(主键索引)
- 3.1、非聚集索引(非主键索引)
一、聚簇索引(主键索引)和非聚簇索索引(非主键索引)区别
1.1、聚簇索引(主键索引)和非聚簇索索引(非主键索引)结构图解
- 结构图解

1.2、从主键和非主键方面理解区别
1.2.1、从主键方面理解
- 可以简单的把主键索引理解为聚集索引,因为我们创建了一个主键索引,在InnoDB引擎下它默认的数据结构就是一个B+树在叶子节点当中,可以看到它除了存储索引外还存储了这一整行数据,所以它的索引跟数据是聚集在一起的,所有叫做聚簇索引。如下图所示:

1.2.2、从非主键方面理解
- 可以简单的把非主键索引理解为非聚簇索,或者叫二级索引。因为在叶子节点当中,可以看到它除了储索引外还存储了这个索引对应的主键,如果当前的查询查询到这个字段索引以外其他的数据,就需要涉及到回表,回到主键索引的这棵B+树,然后根据该属性值的主键再次从树的根节点出发,找到该属性值对应的这个主键索引,从而可以查询到其他的数据。
- 当使用非聚簇索查询索引以外的数据需要涉及到回表,所以它的性能就会变差,如果非聚簇索只查询索引的数据,我们称之为索引覆盖。它