InnoDB为什么使用B+树实现索引?
InnoDB选择B+树作为索引数据结构,是其实现高性能查询的基石。这并非偶然,而是经过对各种数据结构优缺点进行深度权衡后得出的最优解。
下面我将从多个维度详细解释为什么是B+树。
一、核心结论:为了适配磁盘的I/O特性,实现高效数据检索
数据库索引存储在磁盘上,而磁盘I/O(读写)的速度比内存慢几个数量级。因此,索引结构的设计核心目标是:尽量减少磁盘I/O次数。B+树完美地满足了这一需求。
二、与其他数据结构的对比(为什么不是它们?)
为了理解B+树的好,我们先看看为什么不用其他数据结构:
数据结构 | 缺点(在数据库索引场景下) | 结论 |
---|---|---|
哈希表 (Hash Table) | 1. 仅支持等值查询(= 、IN ),无法支持范围查询(> 、< 、BETWEEN )。2. 哈希冲突处理麻烦。 3. 无法利用索引完成排序。 | 适合做缓存(如Redis),不适合做通用数据库索引。 |
二叉搜索树 (BST) | 1. 树的高度不均匀,可能退化成链表,时间复杂度从O(log n)变为O(n)。 2. 每个节点只存一个键值和数据,I/O效率极低 |