MySQL的一级索引和二级索引

导读

本文参考自简书的某位作者,并做了增删。我一般称为“一级索引”和“二级索引”,这样好记一点。正确的称谓是:集聚索引和非聚集索引。顾名思义,叶子节点存放主索引和数据的树,称为集聚索引树;叶子节点存放辅助索引和主索引的树,称为非集聚索引树。

备注:一和二体现了主次和先后关系,聚焦和非聚焦体现不出来,我建议称为:“一级索引”和“二级索引”。

1、一级索引

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

2、二级索引

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

3、例子介绍

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

  • id:主键
  • plname:编程语言名称
  • ranking:排名
idplnameranking
15C2
16Java1
18Php6
23C#5
26C++3
29Ada17
50Go12
52Lisp15
.........

index1.png

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

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

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

index2.png

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

 
  • select id, plname, ranking from pl_ranking where plname='Java';

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

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

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

5、参考:

https://www.jianshu.com/p/23524cc57ca4

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AllenLeungX

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值