mysql索引为啥用B+树,不用二叉树或者B树
📅 2026/7/17 13:13:24
👁️ 阅读次数
📝 编程学习
数据库面试 + 工程设计的经典问题,本质不是“B+树有多厉害”,而是:磁盘 I/O、局部性和 CPU 缓存友好性共同决定了 B+树是最优解。
我会按「从直觉 → 到磁盘 → 到数据库真实场景」的顺序讲清楚,最后给你一个对比表,方便你记忆和面试。
一、先给结论(面试一句话版)
MySQL InnoDB 使用 B+树,是因为:树矮(减少磁盘 I/O)、数据全在叶子节点(范围查询快)、叶子节点成双向链表(扫表快)、非叶子节点只存 key(单页能放更多索引,进一步降低树高)。
二叉树 / AVL / 红黑树太高,B 树范围查询和扫表效率低,只有 B+树在磁盘场景下全面胜出。
二、为什么二叉树 / 红黑树不行?
1. 二叉树的最大问题:树太高
假设你有100 万行数据:
结构 | 大概高度 |
|---|---|
二叉查找树 | ~20 |
平衡二叉树(AVL) | ~20 |
B+树(InnoDB) | 3~4 |
问题来了:
MySQL 的数据在磁盘上
每次比较一个节点 =一次磁盘 I/O<
编程学习
技术分享
实战经验