Mysql--执行计划 Explain

使用 Explain 关键字可以模拟优化器执行 Sql 查询语句,从而知道 Mysql 是如何处理 Sql 的。

0.2 用法

Explain + Sql语句

0.3 执行计划包含的信息

如下图:

Mysql--执行计划 Explain

接下来,将对这 10 个表头中的字段一一进行说明。

1 id

1.1 概念

Select 查询的序列号,包含一组数字,表示查询中执行 Select 子句或操作表的顺序

1.2 三种情况

1.2.1 ID相同,执行顺序由上至下

Mysql--执行计划 Explain

如上图,Mysql 认为三个ID相同均为1;于是,执行顺序由上至下;所以,Mysql 会按照 t1 --> t3 --> t2 的顺序加载这三张表。

1.2.2 ID不同,值越大优先级超高,越先被执行

Mysql--执行计划 Explain

如上图,Mysql 认为三个ID不相同(分别为 1,2,3);于是,先执行值大的;所以,Mysql 会按照 t3 --> t1 --> t2 的顺序加载这三张表。

提示:如果是子查询,ID的序号会递增(如上图,id=2 & id=3 的这两项就是子查询 SUBQUERY)。

1.2.3 ID相同不同,同时存在

Mysql--执行计划 Explain

如上图,ID 存在两种值(分别是 id = 1 & id = 2);值大的先执行,于是,id=2 的先执行,对应就是 t3 表先加载;然后是两个 id=1 的,又按照由上至下的执行顺序,于是,先加载 derived2 表后加载 t2 表。所以这三张表最终的加载顺序就是 t3 --> derived2 --> t2。

提示:derived2 中的 2  表示衍生自 id=2 的那条记录(即衍生自 t3 表)

1.3 结论

ID值越大越先被执行,如果ID相同则由上至下执行

2 select_type

有以下 6 种取值:

SIMPLE

PRIMARY

SUBQUERY

DERIVED

UNION

UNION RESULT

3 table

显示这一行的数据是关于哪张表的

4 type--非常重要--非常重要--非常重要

4.1 介绍

type是指:访问类型

从最好到最差依次是:system > const > eq_ref > ref > range > index > all

一般来说,得保证查询至少达到 range 级别,最好能达到 ref

4.2 详细说明

4.2.0 数据准备

DROP TABLE IF EXISTS employee; CREATE TABLE IF NOT EXISTS employee( id INT PRIMARY KEY auto_increment, name VARCHAR(40), dept_id INT ); INSERT INTO employee(name, dept_id) VALUES('Alice', 1); INSERT INTO employee(name, dept_id) VALUES('Alice2', 1); INSERT INTO employee(name, dept_id) VALUES('BOb', 2); INSERT INTO employee(name, dept_id) VALUES('BOb2', 2); DROP TABLE IF EXISTS department; CREATE TABLE IF NOT EXISTS department( id INT PRIMARY KEY auto_increment, name VARCHAR(40) ); INSERT INTO department(name) VALUES('RD'); INSERT INTO department(name) VALUES('HR');

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzsdfd.html