MySQL 索引优化技巧
时间:2026-10-8 07:08 作者:emer 分类: 无
MySQL 索引优化技巧
索引是数据库性能的关键,建对了快10倍,建错了反而更慢。这篇讲实战技巧。
1. 索引类型
普通索引: 最基本的索引,没有限制
唯一索引: 列值不能重复
主键索引: 特殊的唯一索引,一张表只能一个
联合索引: 多个字段组成的索引
2. 建索引原则
1)where 条件经常用的字段建索引
-- 常用查询
SELECT * FROM users WHERE email = 'xxx@qq.com';
-- 给 email 建索引
CREATE INDEX idx_email ON users(email);
2)联合索引最左前缀原则
-- 建联合索引 (name, age)
CREATE INDEX idx_name_age ON users(name, age);
-- 能用索引
WHERE name = '张三'
WHERE name = '张三' AND age = 25
-- 不能用索引(跳过了name)
WHERE age = 25
3)避免建太多索引
- 索引不是越多越好
- 每个索引都占空间,影响写入速度
- 一张表索引不要超过5个
3. 索引失效场景
1)不要在索引字段上做运算
-- 坏(索引失效)
SELECT * FROM users WHERE age + 1 = 26;
-- 好
SELECT * FROM users WHERE age = 25;
2)不要用函数
-- 坏
SELECT * FROM users WHERE DATE(create_time) = '2026-10-01';
-- 好
SELECT * FROM users WHERE create_time >= '2026-10-01' AND create_time < '2026-10-02';
3)like 前导模糊
-- 坏(用不到索引)
SELECT * FROM users WHERE name LIKE '%张%';
-- 好
SELECT * FROM users WHERE name LIKE '张%';
**4)避免 select ***
-- 坏(查所有字段,可能回表)
SELECT * FROM users WHERE name = '张三';
-- 好(覆盖索引)
SELECT id, name FROM users WHERE name = '张三';
4. 查看索引使用
-- 查看表索引
SHOW INDEX FROM users;
-- 用 explain 分析
EXPLAIN SELECT * FROM users WHERE name = '张三';
重点看:
- type:const/ref 好,ALL 全表扫描坏
- key:实际用到的索引
- rows:扫描行数
5. 总结
索引优化记住:
- where 字段建索引
- 联合索引最左前缀
- 别在索引字段上做运算
- 避免前导模糊查询
- 用 explain 检查
索引是数据库优化的第一步,做好了性能提升很大。