数据库慢,绝大多数时候是"没用索引"或"索引没用对"。掌握索引,是后端和运维的必修课。

一、索引是什么

索引就像一本书的目录:不建索引时查数据要逐行扫描(全表扫描);建了索引就能快速定位。MySQL 默认用 B+ 树索引。

二、用 EXPLAIN 看执行计划

EXPLAIN SELECT * FROM users WHERE email='a@b.com';
-- 重点看 type、key、rows 三列

三、建立合适的索引

CREATE INDEX idx_email ON users(email);       -- 单列索引
CREATE INDEX idx_city_age ON users(city, age);  -- 联合索引

四、最左前缀原则

联合索引 (city, age) 能加速 WHERE city=?WHERE city=? AND age=?,但不能单独加速 WHERE age=?——因为索引按 city 优先排序。

索引不是越多越好:每个索引都会拖慢写入速度、占用存储。只为高频查询条件建索引。

五、常见反例

六、小结

索引优化是性能调优性价比最高的手段。养成写完 SQL 跑一下 EXPLAIN 的习惯,能避免大部分慢查询。