Mysql高级性能优化之Explain(八)

Explain

使用方法:explain sql语句;

分析包含信息:
1、id
(1)select查询的序列号,包含一组数字,表示查询中执行select子句或操作表的顺序
(2)值的三种情况:
①id相同:执行顺序由上到下
在这里插入图片描述
在这里插入图片描述
②id不同: 如果是子查询,id序号会递增,id越大优先级越高,优先被执行
在这里插入图片描述
在这里插入图片描述
③id相同不同,同时存在:
可以认为是一组,从上往下顺序执行;
在所有组中,id值越大,优先级越高,越先执行;
deriverd衍生出来的虚表;
在这里插入图片描述
在这里插入图片描述
总结:相同,顺序走;不同,看谁大;大的先执行;

2、select _type
(1)作用:查询类型,主要用于区别普通查询,联合查询,子查询等复杂查询
(2)结果值:
①SIMPLE:简单select查询,查询中不包含子查询或者UNION
②PRIMARY:查询中包含子查询,最外层查询则被标记为primary
在这里插入图片描述
③SUBQUERY:子查询中首个SELECT(如果有多个子查询存在)
在这里插入图片描述
图片转自https://www.cnblogs.com/danhuangpai/p/8475458.html

④DEPENDENT SUBQUERY:子查询中首个SELECT,但依赖于外层的表(如果有多个子查询存在)
在这里插入图片描述
转自https://www.cnblogs.com/danhuangpai/p/8475458.html

⑤DERIVED:在from列表中包含的子查询被标记为derived(衍生)
把结果放在临时表中
在这里插入图片描述
⑥MATERIALIZED:被物化的子查询
⑦UNION:UNION操作中,查询中处于内层的SELECT(内层的SELECT语句与外层的SELECT语句没有依赖关系)
在这里插入图片描述
转自https://www.cnblogs.com/danhuangpai/p/8475458.html

⑧DEPENDENT UNION:UNION操作中,查询中处于内层的SELECT(内层的SELECT语句与外层的SELECT语句有依赖关系)
⑨UNION RESULT:从union表获取select,两个union合并的结果集在最后,id通常为null
在这里插入图片描述
特别关注 DEPENDENT SUBQUERY :
① 会严重消耗性能;
② 不会进行子查询,会先进行外部查询,生成结果集,再在内部进行关联查询;
③ 子查询的执行效率受制于外层查询的记录数;
④ 可以尝试改成join查询;

3、table :显示这一行的数据是关于哪张表的;

4、partitions:如果查询是基于分区表的话,会显示查询访问的分区;

5、type :访问类型排列;
结果值最好到最差:
①system:表中有一行记录(系统表),这是const类型的特例,平时不会出现;
②const:表示通过索引一次就找到了;
用于比较primary或者unique索引,直接查询主键和唯一索引,因为只匹配一行数据,所以很快。
在这里插入图片描述
在这里插入图片描述
③eq_ref:唯一性索引扫描;
对于每个索引键,表中只有一条记录与之匹配(通常用于主键和唯一索引)。
在这里插入图片描述
在这里插入图片描述
④ref:非唯一性索引扫描,返回匹配某个单独值的所有行;
在这里插入图片描述
在这里插入图片描述
⑤range:只检索给定范围的行,使用一个索引来选择行,key列显示使用了那个索引(between,<,>,in等);
在这里插入图片描述
在这里插入图片描述
⑥index:只遍历索引树,索引文件比数据文件要小;
在这里插入图片描述
在这里插入图片描述
⑦all:全表扫描,从硬盘中读取数据;
在这里插入图片描述
在这里插入图片描述
要求:保证查询至少达到range级别,最好达到ref。

6、possible_keys :查看是否使用了索引,也判断索引是否失效;
在这里插入图片描述
在这里插入图片描述

7、key :实际使用的索引,若为null,则没有使用到索引;
查询中若使用了覆盖索引,则该索引仅出现在key列表中(覆盖索引:查询字段和建立的字段刚好吻合)。
在这里插入图片描述
在这里插入图片描述
8、key_len :表示索引中使用的字节数,可通过该列计算查询中使用的索引长度;
在这里插入图片描述
在这里插入图片描述
key_len计算方式:https://www.cnblogs.com/gomysql/p/4004244.html

9、ref:索引是否被引用到,到底引用了哪几个索引;
在这里插入图片描述
在这里插入图片描述

10、rows :根据表统计信息及索引选用情况,大致估算出找所需的记录需要读取的行数(每张表有多少行被优化器查询过);

11、filtered:满足查询的记录数量的比例,注意是百分比,不是具体记录数;
值越大越好,值依赖统计信息,并不十分准确;

12、Extra
产生的值:
①Using filesort:说明mysql对数据使用一个外部的索引排序,而不是按照表内的索引顺序进行;
mysql中无法利用索引完成排序操作称为“文件排序”;
②Using temporary:使用临时表保存了中间结果,mysql对查询结果排序时,使用了临时表;(常见于order by 和 group by)
在这里插入图片描述
③use index:
④using where:
⑤using join buffer:使用了连接缓存
⑥impossible where:where子句的条件总是false,不能用来获取任何元素
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值