什么是聚簇索引和非聚簇索引?其优缺点是?

聚簇索引

也叫聚集索引,特点:

  • B+树结构,是一种自平衡树,数据行按索引列的值排序顺序进行存储和排序

  • 索引的叶子节点存储索引的键值,并且直接存储数据行,而不是指向数据行的指针

  • 一张表只有一个聚簇索引,因为数据只能按一种顺序存储,通常主键会被创建为聚簇索引

非聚簇索引

特点:

  • 通常也是B+树,索引本身是独立的结构,数据行的存储、排序顺序和索引的顺序无关
  • 索引的叶子节点存储索引列和指向数据行的指针 (主键)

扩展

如果没有主键

如果没有主键,MySQL会选择唯一索引作为聚簇索引;

如果唯一索引和主键索引都没有,MySQL会有隐藏字段db_row_id,选择该隐藏字段作为主键。

聚簇索引能够提高检索效率

  1. 聚簇索引将索引和数据存储在一起,避免了回表操作 (从索引找到指向数据的指针,然后转到数据存储的地址),减少磁盘I/O,提升数据定位的效率

  2. 对于范围查询和排序等场景,如果能够使用索引 (就是索引列包含查询条件),那么聚簇索引可以加速这些查询操作,因为数据存储顺序有序,可以扫描连续的物理存储区域