MySQL的一级索引和二级索引介绍

1、一级索引(聚集索引、聚类索引、簇集索引)

索引和数据存储在一起,都存储在同一个B+tree中的叶子节点。一般主键索引都是一级索引。

2、二级索引

二级索引树的叶子节点存储的是主键而不是数据。也就是说,在找到索引后,得到对应的主键,再回到一级索引中找主键对应的数据记录。

3、例子介绍

下面我们通过一个具体的示例进行演示一级索引和二级索引。有如下表pl_ranking(编程语言排行榜表),该表包含3个字段,如下:

id:主键
plname:编程语言名称
ranking:排名

3.1 主键索引结构


从图中我们可以看到,索引和数据都在一颗树的叶子节点,是存在一起的。通过定位索引就直接可以查找到数据。如果查找id=16的编程语言

select id, plname, ranking from pl_ranking where id=16;

则只需要读取3个磁盘块,就可以获取到数据。

3.2 非主键索引结构

如果根据字段plname创建索引,B+树结构如下:

从上图中我们发现,该B+tree根据plname列进行构建的,只存储一级索引数据。比如,查找编程语言为“Java”的数据

select id, plname, ranking from pl_ranking where plname=‘Java’;

首先通过二级索引树中找到Java对应的主键id为 “16”(读取2个磁盘块)。然后在去主键索引中查找id为“16” 的数据(读取3个磁盘块)。

3.3 一级索引和二级索引的关系:回表

一级索引可以单独存在,二级索引不能单独存在,必须依附于一级索引,这叫做“回表”。

4.0 二级索引存储主键值而不是存储数据优缺点

优点:
1、减少数据冗余
2、减少行移动或者数据页分裂时二级索引的维护工作,当数据需要更新的时候,二级索引不需要修改,只需要修改一级索引,一个表只能有一个一级索引,其他的都是二级索引,这样只需要修改一级索引就可以了,不需要重新构建二级索引
缺点:
根据二级索引查找行的完整数据需要回表

posted @ 2023-05-11 17:06  姚春辉  阅读(203)  评论(0编辑  收藏  举报