Appearance
数据库索引为什么常用 B+ 树
修订于 2026-10-12。本文不引用未经核实的查询耗时或性能倍数。
B+ 树适合按键查找和范围扫描,但“数据库索引都使用 B+ 树”并不准确。不同数据库与索引类型会采用不同结构。本文以 MySQL InnoDB 为例,讨论常见的有序索引。
InnoDB 中的两类索引
InnoDB 的聚簇索引保存行数据,通常由主键定义。二级索引条目包含索引列与对应行的主键值。通过二级索引查找未被索引覆盖的列时,数据库还可能根据主键取回行数据。这解释了为什么宽主键会增加二级索引占用,也解释了覆盖索引为何在某些查询中有益。
有序结构能支持等值查找、前缀范围和排序等操作,但能否使用索引仍取决于查询条件、列顺序、选择性、统计信息和优化器判断。索引并非越多越好:写入需要维护索引,索引还消耗存储与缓存。
怎样设计与验证
- 先找出慢查询和高频查询,记录过滤、排序、返回列与执行频率。
- 按真实查询设计联合索引,留意最左前缀和范围条件的影响。
- 用 EXPLAIN 观察访问路径与预估行数;必要时在测试环境用实际执行统计复核。
- 比较建立索引前后的查询延迟、写入代价和空间占用。
- 对不再使用的索引谨慎清理,避免仅凭单次查询结果作决定。
如果过滤条件并不适合树索引,全文、空间、哈希或其他专用索引可能更合适;具体支持以所用数据库版本文档为准。