聚簇索引是指索引的结构跟数据记录的物理存储结构一致,也可以说,聚合索引就是数据记录的物理存储结构,innodb引擎中,聚簇索引就是主键索引。
以表t为例,分析在不同存储引擎下,其索引的结构:
create table t(
id int primary key auto_increment,
score int,
name varchar(255),
KEY idx_name (name)
);
Innodb引擎
主键索引(聚簇索引)
主键索引即聚簇索引,叶子节点存储完整的一条记录,非叶子节点存储索引字段的值。
聚簇索引的问题:记录插入查询依赖主键的顺序。
若按主键有序插入,那么主键索引是顺序写入,性能较高;
若主键不是有序插入,比如uuid,则每次插入需查找插入位置(可能还涉及页分裂),变成随机写入,性能较差;
非主键索引
非主键索引,也称为二级索引,叶子节点存储主键的ID,若要查询记录的其它信息,则需要回表到主键索引。
MyISAM引擎
MyISAM引擎按照记录的插入顺序,保存到磁盘上。
MyISAM的主键索引和非主键索引均不是聚簇索引,都不同于记录的物理存储结构。
主键索引
主键索引,其叶子节点存储该条记录的地址。
非主键索引
非主键索引,同主键索引类似,叶子节点存储该条记录的地址。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。