在数据库索引场景下,为什么 MySQL 更倾向于采用 B+ 树而非其他树形结构,其设计依据是什么?
考察说明
考查候选人是否理解 B+ 树的结构特性与数据库索引在磁盘 IO、范围查询方面的匹配度。
回答思路
- 【回答框架 1】B+ 树是一种多路平衡搜索树,所有数据记录存储在叶子节点,叶子节点之间通过指针链接形成有序链表。内部节点只保存键值和子指针,不存储实际数据。
- 【回答框架 2】相比 B 树,B+ 树的内部节点能容纳更多键值,因此树高更低,减少磁盘 IO 次数。一次 IO 可读取更多键值,提升索引效率。
- 【回答框架 3】B+ 树叶子节点的有序链表天然支持范围查询和排序,只需遍历链表即可,而 B 树的中序遍历需要多次回溯,效率较低。
- 【回答框架 4】数据库索引通常存储在磁盘上,B+ 树的高扇出和叶子节点的顺序性使得读写局部性好,减少随机 IO,有利于预读和缓存优化。
- 【关键点 1】B+ 树只有叶子节点存储数据,内部节点仅存键值和指针,扇出更高。
- 【关键点 2】树高更低,磁盘 IO 次数更少。
- 【关键点 3】叶子节点有序链表支持高效范围查询和排序。
- 【关键点 4】相比哈希索引,B+ 树支持范围查询和排序;相比 B 树,更有利于磁盘 IO 和范围扫描。
- 【易错点 1】未提及 B 树的缺陷,仅说树高低。
- 【易错点 2】误以为 B+ 树适用于所有场景,如等值查询哈希索引可能更快。
- 【易错点 3】忽视叶子节点链表带来的顺序读优势。