Skip to content

数据库索引为什么常用 B+ 树 ​

修订于 2026-10-12。本文不引用未经核实的查询耗时或性能倍数。

B+ 树适合按键查找和范围扫描,但“数据库索引都使用 B+ 树”并不准确。不同数据库与索引类型会采用不同结构。本文以 MySQL InnoDB 为例,讨论常见的有序索引。

InnoDB 中的两类索引 ​

InnoDB 的聚簇索引保存行数据,通常由主键定义。二级索引条目包含索引列与对应行的主键值。通过二级索引查找未被索引覆盖的列时,数据库还可能根据主键取回行数据。这解释了为什么宽主键会增加二级索引占用,也解释了覆盖索引为何在某些查询中有益。

有序结构能支持等值查找、前缀范围和排序等操作,但能否使用索引仍取决于查询条件、列顺序、选择性、统计信息和优化器判断。索引并非越多越好:写入需要维护索引,索引还消耗存储与缓存。

怎样设计与验证 ​

  1. 先找出慢查询和高频查询,记录过滤、排序、返回列与执行频率。
  2. 按真实查询设计联合索引,留意最左前缀和范围条件的影响。
  3. 用 EXPLAIN 观察访问路径与预估行数;必要时在测试环境用实际执行统计复核。
  4. 比较建立索引前后的查询延迟、写入代价和空间占用。
  5. 对不再使用的索引谨慎清理,避免仅凭单次查询结果作决定。

如果过滤条件并不适合树索引,全文、空间、哈希或其他专用索引可能更合适;具体支持以所用数据库版本文档为准。

参考资料 ​

梧桐和风 · 让复杂的技术讲得更清楚