MySQL中explain的使用

输出的参数
列名说明
id标识select所在的行。如果没有子查询,每行都将显示1,否则,内层的select语句一般会顺序编号,对应原始语句中的位置
select_type显示本行是简单或复杂select
table访问引用哪个表
partitions匹配的分区信息
type访问类型。ALL、index、range、ref、eq_ref、const/system、NULL
possible_keys揭示哪些索引可能有利于高效的查找
key显示mysql决定采用哪个索引来优化查询
key_len显示mysql在索引里使用的字节数
ref当使用索引列等值查询时,与索引列进行等值匹配的对象信息
rows读取的行数,估值
Extra额外信息。using index、filesort等
id详解

id越大执行优先级越高,相同则从上往下执行,为NULL最后执行

查询优化器可能对子查询进行重写,进而转化为连接查询,查询计划中的两个id会是相同的

select_type详解
属性说明
SIMPLE简单查询,查询不包含子查询和union
PRIMARY复杂查询中最外层的select
SUBQUERY包含的子查询语句无法转换为semi-join,并且为不相关子查询,优化器采用物化方案执行该子查询,该子查询的第一个select就会subquery。由于被物化,只需要执行一次
DERIVED对于采用物化执行的包含派生表的查询
UNION在union查询语句中的第二个和紧随其后的select
UNION RESULT选择使用临时表完成union查询的去重工作。当是这个值的时候,可以看到table的值是<unionN,M>,这说明匹配的id行是这个集合的一部分
MATERIALIZED选择将子查询物化之后与外层查询进行连接查询
DEPENDENT SUBQUERY包含的子查询语句无法转换为semi-join,并且为相关子查询,则该子查询的第一个select会是此值
DEPENDENT UNION包含的子查询语句中包含了UNION或UNION ALL的大查询

物化:子查询语句中的结果集中的记录保存到临时表的过程称之为无话,物化表都建立了索引
semi-join:半连接,仅关心是否存在匹配,不用关心具体有多少条记录与之匹配

table详解
属性说明
< derivenN>采用物化方式,依赖id=N的查询
<unionN,M>组合查询
type详解
属性说明
ALL最坏的情况,全表扫描
index和全表扫描一样,不过按照索引次序进行,避免了排序,但是开销依然大。如果Extra有Using index表示正在使用覆盖索引,只扫描索引的数据,比按索引次序扫描的开销要小很多
range范围扫描,一个有限制的索引扫描。key列显使用了哪个索引,当使用=、<>、>、>=、<、<=、IS NULL、<=>、BETWEEN或者IN时,用常量比较关键字列时,可使用range
index_merge使用索引合并的方式执行
ref一种索引访问,它返回所有匹配某个单个值的行。只有当使用非唯一性索引或唯一性索引非唯一性前缀才会发生,使用索引的最左前缀
eq_ref最多只返回一条符合条件的记录。使用唯一性索引或主键查找时会发生,很高效
const当确定最多只有一行匹配时,mysql优化器会在查询前读取它并只读取一次,因此非常快。当主键放入where子句时,mysql会把这个查询转为一个常量
system这是const连接类型的一种特例,表仅有一行满足条件
NULLmysql能在优化阶段分解查询语句,在执行阶段甚至用不到访问表或索引

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

system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL

extra详解
属性说明
Using index查询的列被缓存覆盖,并且where筛选条件是索引的前导列。一般是覆盖索引
Using where Using index查询的列被索引覆盖,并且where筛选条件是索引列之一,但并不是索引的前导列,意味着无法直接通过索引查找来查询到符合条件的数据
NULL查询的列未被索引覆盖,并且where筛选条件是索引的前导列,意味着用到了索引,但是部分字段未被索引覆盖,必须通过回表来查询
Using index condition查询的列不完全被索引覆盖,where条件中是一个前导列的范围
Using temporary需要创建一张内部临时表来处理查询,需要进行优化
Using filesort对结果是用一个外部索引排序,而不是按照索引次序从表里读取行,需要进行优化
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值