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 执行计划深度解析

image

3. 实战 SQL


  -- 查看执行计划
EXPLAIN SELECT * FROM user WHERE name = '张三' AND age = 20;

五、索引优化实战步骤

image

六、索引优化最佳实践

image

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

image

总结

索引优化是 MySQL 性能调优的核心手段,执行计划是优化的必备工具。掌握索引原理、失效场景、EXPLAIN 解读,就能快速解决 90% 的慢 SQL 问题,轻松应对面试与生产环境。

下篇预告:《MySQL 第九天:事务隔离级别与锁机制实战》

posted @ 2026-04-12 10:32  白鹿为溪  阅读(15)  评论(0)    收藏  举报