MySQL 第八天:索引优化全攻略 + EXPLAIN 执行计划深度解析(附实战 SQL + 面试必问)
承接上篇《MySQL 第七天:基础回顾 + 锁机制深度解析》,今天聚焦索引优化与执行计划,这是 MySQL 面试、性能调优的核心必考内容,从原理到实战一站式掌握。
今日学习目标
1.索引核心:索引本质、优缺点、适用场景
2.索引分类:主键索引、普通索引、唯一索引、联合索引、覆盖索引
3.索引失效场景:10 种高频失效原因 + 实战验证
4.执行计划:EXPLAIN 全字段解析、读懂 SQL 执行效率
5.索引优化实战:慢 SQL 优化步骤、最佳实践
1. 什么是索引
索引是帮助 MySQL 高效获取数据的排好序的数据结构,类似书籍目录,避免全表扫描。
2. 索引优缺点
-
优点:大幅提升查询效率、降低排序成本
-
缺点:占用磁盘空间、增删改性能下降、维护索引开销
3. 索引适用场景
-
频繁作为查询条件的字段
-
经常排序、分组的字段
-
多表关联的连接字段
-
数据量大且查询频率高的表
二、MySQL 索引分类(实战必懂)
1. 按字段特性分
主键索引:PRIMARY KEY,非空唯一,一张表仅一个
唯一索引:UNIQUE,值唯一,允许 NULL
普通索引:INDEX,仅加速查询
2. 按字段数量分
单值索引:单个字段建索引
联合索引:多个字段组合建索引,遵循最左前缀原则
3. 按逻辑功能分
覆盖索引:查询字段全部在索引中,无需回表
前缀索引:对字段前 N 个字符建索引,节省空间
4. 底层数据结构
InnoDB 默认B + 树索引,支持范围查询、有序遍历,是索引高效的核心原因。
三、索引失效场景(10 种高频坑)
1.违反最左前缀:联合索引未按顺序查询
2.索引列运算:where id+1=100
3.索引列函数:where substring(name,1,2)='张'
4.类型隐式转换:字符串不加引号where phone=13800138000
5.模糊查询前置 %:where name like '%张'
6.or 连接非索引列:where id=1 or age=20(age 无索引)
7.!= / not in / not exists:大概率失效
8.order by 违反规则:联合索引排序字段不匹配
9.数据分布不均:全表扫描比索引更快
10.is null / is not null:视数据分布决定是否失效
四、EXPLAIN 执行计划深度解析

3. 实战 SQL
-- 查看执行计划
EXPLAIN SELECT * FROM user WHERE name = '张三' AND age = 20;
五、索引优化实战步骤

六、索引优化最佳实践

七、高频面试题(索引 + 执行计划)

总结
索引优化是 MySQL 性能调优的核心手段,执行计划是优化的必备工具。掌握索引原理、失效场景、EXPLAIN 解读,就能快速解决 90% 的慢 SQL 问题,轻松应对面试与生产环境。
下篇预告:《MySQL 第九天:事务隔离级别与锁机制实战》

浙公网安备 33010602011771号