关于explain

来源:6-3 索引优化策略(上)

慕粉1559449418

2020-10-07

老师,你好,关于explain是这样理解的,麻烦帮我看下总结的对不对,错误的地方帮我指出来
mysql推出了explain执行计划命令,该命令可以以列表的形式查看mysql的查询优化器对当前查询语句的执行计划,查询语句中可能会存在子查询、连接查询、联合查询等子查询操作,同时查询语句中所涉及的表也是由这些子查询操作的,mysql的查询优化器会根据查询语句中所涉及的表的执行顺序生成执行计划,每个执行计划都包含对相关表操作的一个select子句的执行计划的描述,有一点需要说明,执行计划中select子句要操作的表除了原查询sql中指定了具体表名的表,还有原查询语句中子查询结果存放的临时表,这些临时表都是查询优化器生成的,比如,from子句中的子查询,查询优化器会将该查询结果存放在derived临时表中,执行计划的表述信息中,包含了分析sql性能的重要指标信息,比如type、key、extra等
explain——id
表示对当前查询语句所涉及的表的执行顺序的序列号,当然这些表还包含子查询结果所存放的临时表,虽然在sql中是不可见的,但是查询优化器会生成这些表
id值相等,执行顺序由上而下执行
id不等,id越大优先权越大
explain——type
表示访问类型,mysql决定如何查找表中的行,也就是当前执行计划中的select子句如何从表中查找数据,常用取值:
const:通过主键或唯一索引来查找数据,而且只返回一行速度较快
eq_ref:通过主键或唯一索引进行关联查询,而且只返回一条记录
ref:通过非唯一索引进行等值查询,可能返回多条记录,因为索引的值不唯一
system:表中只有一条记录
index:全索引扫描,扫描的是索引树
range:扫描指定范围的索引,如果是覆盖索引,那么直接将索引值返回即可,否则需要进行回表查询,找到对应的记录返回
NULL:不需要访问任何表、索引,直接返回结果
explain——key
key : 实际使用的索引
possible_keys:可能用到的索引
explain——extra
using index:表示相应的select操作使用了覆盖索引
这里有个疑问,如果extra为using index,是不是type就一定为index?
using filesort:按照文件系统排序,当select子句中有order by时,并且不是按照索引进行排序,那么就会按照文件系统排序
疑问:为什么会按照文件系统排序,原理是什么?
另外,explain中ref这个指标是什么意思?

写回答

1回答

sqlercn

2020-10-08

extra为using index 时type不一定是index,但是在key列中应该会有具体使用的索引。using filesort是可能需要使用物理临时文件进行排序,就是会生成临时表。ref列表示那些列或是常量被用于通过索引过滤数据


0
0

MySQL提升课程 全面讲解MySQL架构设计

面面俱到讲解影响MySQL性能的各个因素,让MySQL架构了然于胸。

4419 学习 · 547 问题

查看课程