← 返回博客
/后端

数据库索引原理与调优

2 分钟阅读

数据库索引原理与调优

索引是数据库性能的第一杠杆。理解它的原理,才能做出正确的取舍。

B-Tree 为什么快

B-Tree 让查找复杂度维持在 O(log n),且节点按页存储、磁盘 IO 次数极少:

        [ 30 | 60 ]
       /     |      \
   [10|20] [40|50] [70|80]

每次查询只需访问 3~4 层节点,这就是”千万行也能毫秒返回”的秘密。

覆盖索引

当索引包含查询所需的全部列时,可以免回表

CREATE INDEX idx_user_email ON users(email) INCLUDE (name);

-- 下面的查询只需读索引
SELECT name FROM users WHERE email = 'a@b.com';

用 EXPLAIN 分析

EXPLAIN ANALYZE
SELECT * FROM orders
WHERE user_id = 42 AND status = 'paid';

关注三个指标:

指标含义
type访问类型,ref/range 优于 ALL
rows预估扫描行数
Actual Time实际执行耗时

常见误区

  • 索引不是越多越好——每个索引都有写入成本
  • 前导列才能命中联合索引
  • 对低选择性的列建索引往往得不偿失

小结

调优的顺序应该是:先 EXPLAIN,再建索引,最后观察。索引是银弹的”前提是选对了子弹”。

加载中…