mysql索引原理

167 阅读2分钟

一、各种树形结构

搜索二叉树、B树、B+树、 B*树

二、树的分裂

三、Mysql的存储引擎和索引

image.png

image2.png

四、Page结构

image3.png

现在看下如何定位一个Record:

1 通过根节点开始遍历一个索引的B+树,通过各层非叶子节点最终到达一个Page,这个Page里存放的都是叶子节点。

2 在Page内从"Infimum"节点开始遍历单链表(这种遍历往往会被优化),如果找到该键则成功返回。如果记录到达了"supremum",说明当前Page里没有合适的键,这时要借助Page的Next Page指针,跳转到下一个Page继续从"Infimum"开始逐个查找。

image4.png

五、Page和B+树节点

结合B+树的结构和前面介绍的4种Record的内容,我们终于可以画出一幅全景图。由于辅助索引的B+树与主键索引有相似的结构,这里只画出了主键索引树的结构图,只包含了"主键非叶节点"和"主键叶子节点"两种节点,也就是上图的的绿色和黄色的部分。

image5.png

把上图还原成下面这个更简洁的树形示意图,这就是B+树的一部分。注意Page和B+树节点之间并没有一一对应的关系,Page只是作为一个Record的保存容器,它存在的目的是便于对磁盘空间进行批量管理,上图中的编号为47的Page在树形结构上就被拆分成了两个独立节点。一个page可以拆成多个节点,一个节点亦可对应多个page。

参考:

mysql 索引结构图解 www.jianshu.com/p/a1420a2f5…

图解 MySQL 索引:B-树、B+树 | 算法必看系列三十 developer.aliyun.com/article/759…

mysql底层解析——innodb文件系统基本结构(段、簇、页面),包括连接、解析、缓存、引擎、存储等 cloud.tencent.com/developer/a…

InnoDB一棵B+树可以存放多少行数据? mp.weixin.qq.com/s/xUJp62fFX…

[玩转MySQL之十一]MySQL InnoDB文件存储结构 zhuanlan.zhihu.com/p/71204073