是什么
查看执行计划
能干嘛
1.表的读取顺序
2.数据读取操作的操作类型
3.哪些索引可以使用
4.哪些索引被实际使用
5.表之间的应用
6.每张表有多少行被优化器查询
执行计划包含的信息
每一条记录大概都能够表示为:
select xxx where xxx,查询类型和查找哪张表
记录的表头信息都是描述这一过程,例如select_type,用到的table,用到的type(检索类型)这些
id
select_type
-
Simple
- 简单的select查询,不包含子查询或者union
-
PRIMARY
-
SUBQUERY
-
DERIVED
- 在From列表中包含的子查询则被标记为DERIVED,mysql会递归执行这些子查询,把结果放在临时表
-
UNION
- 若第二个select出现在union之后,则被标记为UNION,若UNION包含在FROM子句的子查询中,外层SELECT将被标记为:DRIVED
-
UNION_RESULT

table
- 显示这行数据来自那张表
- DERIVED+[序号],这个序号指代是id,代表这个表示有id=序号所产生的临时表
type

显示查询属于哪种类型
possible_keys
- 显示可能应用再这张表上的索引,但是不一定被实际查询所使用
key
key_len
- 表示索引中使用的字节数,也就是这个字段所定义最大字节数,与实际内容无关,是根据定义计算得来,而不是内容,例如char(4)的长度为13这个长度在不损失精度的情况下,最好越小越好,非空字段会额外存储一个字节

ref
- 显示索引的哪一列被使用了,用于展示哪些列或常量用于查找索引列上的值,意思其实是在type=ref或req_ref场景下具体用了哪些列或常量被用于索引的=匹配
rows
不适合再其他列使用,但是十分重要的信息
思维导图
