前言
本博客主要是对《MySQL是怎样运行的》一书的内容进行整理
第六章 B+树索引
数据库中,各个数据页可以组成一个双向链表,而每个数据页中的记录会按照主键值从小到大的顺序组成一个单向链表。
可以通过数据页的页目录寻找对应的槽,通过槽使用二分法快速查找到对应的信息。
查找信息流程
1、定位到记录所在的页
2、从所在的页内查找相应的记录
一个简单的索引方案
新分配的数据页编号可能并不是连续的,也就是说我们使用的这些页在磁盘上可能并不挨着
1、下一个数据页中数据主键的大小必须大于上一个页中用户记录的主键值
在对页中的记录进行删改操作的过程中,我们必须通过一些诸如记录移动的操作来始终保证这个状态一直成立:下一个数据页中用户记录的主键值必须大于上一个页面中用户记录的主键值,这个过程也可以称为页分裂。
2、给所有的页简历一个目录项
每个页对应一个目录项,每个目录项记录了页号和页的用户目录中的最小的主键值
InnoDB设计者发现这个目录项与数据记录十分相似,只不过目录项的两个列是页号和主键。所以他们将目录项视作一条记录按照相同方式进行管理(record_type为1的记录即为目录项记录)。
为了快速管理构造出复杂的树索引模式,类似多级目录,大目录套小目录,小目录里才是实际的数据
抽象出来的结构如下所示:
即B+树。
B+树
我们真正的用户记录都放在B+树最底层的节点上(只有最底层是数据页),被称之