1、执行计划基础
1.1、执行计划(Explain)定义
在 MySQL 中可以通过 explain
关键字模拟优化器执行 SQL语句,从而解析MySQL 是如何处理 SQL 语句的。
1.2、MySQL查询过程
- 客户端向 MySQL 服务器发送一条查询请求
- 服务器首先检查查询缓存,如果命中缓存,则立刻返回存储在缓存中的结果。否则进入下一阶段
- 服务器进行 SQL 解析、预处理、之后由优化器生成对应的执行计划
- MySQL 根据执行计划,调用存储引擎的 API 来执行查询
- 将结果返回给客户端,同时缓存查询结果
注意:只有在MySQL8.0之前才有查询缓存,MySQL8.0之后查询缓存被去掉了
1.3、启动执行计划
explain select 投影列 FROM 表名 WHERE 条件 ;
举例:
explain select * from teacher;
1.4、执行计划参数简介
2、实战解析
2.1、创建示例表
-- 课程表
create table course
(
cid int(3),
cname varchar(20),
tid int(3)
);
-- 教师表
create table teacher
(tid int(3),tname varchar(20),tcid int(3)
);
-- 教师证表
create table teacherCard
(tcid int(3),tcdesc varchar(200)
);
explain + select语句分析:
explain select * from teacher;
SQL执行计划结果:
2.2、执行计划参数详解
3、索引失效详解
3.1、索引失效情况
七字诀:模型数空运最快
- 模:模糊查询LIKE以%开头
- 型:数据类型错误
- 数:对索引字段使用内部函数
- 空:索引列是NULL
- 运:索引列进行四则运算
- 最:复合索引不按索引列最左开始查找
- 快:全表查找预计比索引更快