MySQL -- 聚合索引VS非聚簇索引

聚簇索引是指索引的结构跟数据记录的物理存储结构一致,也可以说,聚合索引就是数据记录的物理存储结构,innodb引擎中,聚簇索引就是主键索引。
【MySQL -- 聚合索引VS非聚簇索引】以表t为例,分析在不同存储引擎下,其索引的结构:

create table t( id int primary key auto_increment, score int, name varchar(255), KEY idx_name (name) );

Innodb引擎 主键索引(聚簇索引)
主键索引即聚簇索引,叶子节点存储完整的一条记录,非叶子节点存储索引字段的值。
MySQL -- 聚合索引VS非聚簇索引
文章图片

聚簇索引的问题:记录插入查询依赖主键的顺序。
若按主键有序插入,那么主键索引是顺序写入,性能较高;
若主键不是有序插入,比如uuid,则每次插入需查找插入位置(可能还涉及页分裂),变成随机写入,性能较差;
非主键索引
非主键索引,也称为二级索引,叶子节点存储主键的ID,若要查询记录的其它信息,则需要回表到主键索引。
MySQL -- 聚合索引VS非聚簇索引
文章图片

MyISAM引擎 MyISAM引擎按照记录的插入顺序,保存到磁盘上。
MyISAM的主键索引和非主键索引均不是聚簇索引,都不同于记录的物理存储结构。
主键索引
主键索引,其叶子节点存储该条记录的地址。
MySQL -- 聚合索引VS非聚簇索引
文章图片

非主键索引
非主键索引,同主键索引类似,叶子节点存储该条记录的地址。
MySQL -- 聚合索引VS非聚簇索引
文章图片

    推荐阅读