MySQL 索引优化技巧
时间:2026-10-8 07:27 作者:emer 分类: 无
MySQL 索引优化技巧
索引是数据库性能的关键,用对了查询快很多。
1. 索引类型
- 主键索引: 主键自带,唯一且非空
- 普通索引: 最基本的索引
- 唯一索引: 字段值不能重复
- 联合索引: 多个字段组成的索引
- 全文索引: 全文搜索用
2. 创建索引
-- 普通索引
CREATE INDEX idx_name ON users(name);
-- 唯一索引
CREATE UNIQUE INDEX idx_phone ON users(phone);
-- 联合索引
CREATE INDEX idx_name_age ON users(name, age);
3. 索引失效情况
1)不要在索引字段上做运算:
-- 失效
SELECT * FROM users WHERE age + 1 = 20;
-- 生效
SELECT * FROM users WHERE age = 19;
2)like 左模糊:
-- 失效
SELECT * FROM users WHERE name LIKE '%张';
-- 生效
SELECT * FROM users WHERE name LIKE '张%';
3)联合索引不满足最左前缀:
-- 索引:(name, age)
-- 生效(从name开始)
SELECT * FROM users WHERE name = '张三' AND age = 20;
-- 失效(跳过name直接查age)
SELECT * FROM users WHERE age = 20;
4)用 or 连接:
- or 两边有一个没索引就全表扫描
4. 优化原则
- 频繁查询的字段加索引
- 区分度高的字段适合做索引
- 不要加太多索引(影响写入性能)
- 联合索引注意最左前缀
- 尽量扩展索引,不要新建索引
5. 查看索引
-- 查看表的索引
SHOW INDEX FROM users;
6. 常见问题
- 索引加了还是慢?检查是不是失效了
- 查询还是慢?用 EXPLAIN 分析
- 写入慢?索引太多了
总结
MySQL 索引优化要点:
- 常用查询字段加索引
- 注意索引失效情况
- 联合索引最左前缀
- 不要加太多索引
- EXPLAIN 分析执行计划
数据库性能优化,索引是第一步。