这一章主要是B+树的基础知识。
6.1
查找大体可以分成两个小步骤
定位到记录所在的页
从所在的页内查找相应的记录
InnoDB引擎下,当我们用主键所在的列进行查找时,可以利用页里的Page Directory区中的槽和记录本身的顺序进行快速的查找。
而使用无索引的列时,我们就只能顺序地进行扫描了。这是因为我们不能快速地定位记录所在的页。
6.2
这一节在我看来写的有点过长了,其实就是想引出目录项的概念(也就是B+树的内部叶节点)
首先我们要保证每个数据页内部的各个记录是有序的。
接着,我们需要利用目录项,来快速地查找记录所在的页。每个目录项最少要包含主键的值以及对应的页号。其中主键值是每个页面里最小的主键值。
之后,我们可以把目录项这个概念抽象一下:目录项就是只有两列的普通记录。仔细想一下,目录项只需要主键和页号就行了,其实和普通的页没什么区别。
事实上InnoDB中也是这么做的。我们的记录头信息中有record_type属性,当属性值为1时,这个记录就是目录项。
而因为目录项和普通记录并无太大区别,因此可以复用INDEX这种页结构。也就有着同样的PageDirectory区域,方便我们快速地对目录项进行查找。
索引相关概念
- 聚簇索引
1 使用主键值来保证记录和页有序的索引。这句话意味着页内记录、页、目录项都要保证有序。
2 B+树的叶子节点存储的是完整的用户记录。 - 二级索引/辅助索引
指的是对非主键所