B+树详解:MySQL索引的数据结构
引言 MySQL的InnoDB引擎使用B+树作为索引的数据结构。理解B+树是掌握索引优化的基础。 一、从二叉树到B+树的演进 1.1 二叉查找树(BST) 10 / \ 5 15 / \ / \ 3 7 12 20 问题:可能退化为链表,查询O(n) 1.2 平衡二叉树(AVL) 通过旋转保持平衡,查询O(log n)。 问题: 每个节点只存1个元素 树高度大:100万数据需要20层 磁盘IO次数多(每层一次IO) 1.3 B树 [10, 20, 30] / | | \ [1,5] [12,15] [22,25] [35,40] 特点: 多路:每个节点存多个元素 所有节点都存数据 降低树高度 问题: 非叶子节点也存数据,占用空间 范围查询需要中序遍历 1.4 B+树 非叶子节点(只存索引): [10, 20, 30] / | | \ / | | \ 叶子节点(存数据+索引): [1,5,8] → [10,12,15] → [20,22,25] → [30,35,40] ↑ 双向链表 ↑ 特点: ...