首页/数据/SQL 速查/B 树索引适用与不适用场景
性能与执行计划72 条

B 树索引适用与不适用场景

B 树索引支持等值、范围、前缀匹配与排序;对列上做运算、前置通配、类型不匹配的条件帮不上忙。

SQL 速查数据更新于 2026-10-12

示例

示例
-- 能走 B 树索引
SELECT * FROM orders WHERE created_at >= '2024-01-01' AND created_at < '2024-02-01';
SELECT * FROM users  WHERE name LIKE 'wang%';
SELECT * FROM orders WHERE user_id = 100 ORDER BY created_at LIMIT 10;

-- 通常走不了(列被运算或前置通配)
SELECT * FROM orders WHERE YEAR(created_at) = 2024;
SELECT * FROM users  WHERE name LIKE '%wang';
支持=、>、>=、<、<=、BETWEEN、IN、ORDER BY、LIKE 前缀匹配
不支持前置通配、列上函数或表达式(除非建函数索引)、类型隐式转换
两库一致MySQL 与 PostgreSQL 的 B 树行为大体相同,函数索引写法不同

易错点

  • 认为给列加了索引所有条件都能用:B 树对列上运算与前置通配无能为力,需要改写条件或建函数索引
  • 小表也迷信索引:全表扫描少量数据可能更快,索引还有写入维护成本

数据来源与参考

  • MySQL 8.0 Reference Manual §8.3.1 How MySQL Uses Indexes
  • PostgreSQL Documentation §11.2 Index Types
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌