面试题答案
一键面试- B+树索引结构概述
- B+树是一种多路平衡查找树,所有数据记录都存放在叶子节点,非叶子节点仅用于索引引导。叶子节点之间通过双向链表相连,方便范围查询。
- 单条件查询流程
- 解析SQL:MySQL首先对SQL语句进行词法、语法解析,确定要查询的表、列以及查询条件。例如,对于
SELECT * FROM users WHERE id = 10;
,明确要从users
表中查询id
为10的记录。 - 定位索引:MySQL查询优化器根据查询条件,决定是否使用索引以及使用哪个索引。如果
id
列上有B+树索引,优化器会选择使用该索引。 - B+树查找:
- 从B+树的根节点开始,根节点存储了指向子节点的指针以及该子节点索引键值的范围。例如,根节点可能有指针分别指向
id
范围为1 - 1000、1001 - 2000等子节点。 - 比较查询条件
id = 10
与根节点中各子节点索引键值范围,找到对应的子节点。假设id = 10
落在1 - 1000范围,就顺着该范围对应的指针进入子节点。 - 重复上述过程,在子节点中继续查找,直到到达叶子节点。叶子节点存储了实际的
id
值以及对应数据记录在数据页中的地址(通常是页号和偏移量)。
- 从B+树的根节点开始,根节点存储了指向子节点的指针以及该子节点索引键值的范围。例如,根节点可能有指针分别指向
- 数据页读取:
- 根据B+树叶子节点获取到的数据记录在数据页中的地址,MySQL从磁盘读取对应的数据页到内存的缓冲池中。
- 在数据页中,根据偏移量定位到具体的数据记录,将其返回给客户端。
- 解析SQL:MySQL首先对SQL语句进行词法、语法解析,确定要查询的表、列以及查询条件。例如,对于
- 数据页的作用
- 数据页是InnoDB存储引擎中数据存储的基本单位。它包含了多条数据记录,在B+树索引定位到具体数据记录所在的数据页地址后,数据页被读取以获取实际的数据。同时,数据页中的记录按照一定的格式组织,有记录头、数据字段等,方便数据的存储和读取。