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

聚簇索引是指索引的结构跟数据记录的物理存储结构一致,也可以说,聚合索引就是数据记录的物理存储结构,innodb引擎中,聚簇索引就是主键索引。

以表t为例,分析在不同存储引擎下,其索引的结构:

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

Innodb引擎

主键索引(聚簇索引)

主键索引即聚簇索引,叶子节点存储完整的一条记录,非叶子节点存储索引字段的值。

MySQL -- 聚合索引VS非聚簇索引_第1张图片

聚簇索引的问题:记录插入查询依赖主键的顺序。
若按主键有序插入,那么主键索引是顺序写入,性能较高;
若主键不是有序插入,比如uuid,则每次插入需查找插入位置(可能还涉及页分裂),变成随机写入,性能较差;

非主键索引

非主键索引,也称为二级索引,叶子节点存储主键的ID,若要查询记录的其它信息,则需要回表到主键索引。

MySQL -- 聚合索引VS非聚簇索引_第2张图片

MyISAM引擎

MyISAM引擎按照记录的插入顺序,保存到磁盘上。

MyISAM的主键索引和非主键索引均不是聚簇索引,都不同于记录的物理存储结构。

主键索引

主键索引,其叶子节点存储该条记录的地址。

MySQL -- 聚合索引VS非聚簇索引_第3张图片

非主键索引

非主键索引,同主键索引类似,叶子节点存储该条记录的地址。

MySQL -- 聚合索引VS非聚簇索引_第4张图片

你可能感兴趣的:(mysql)