mysql 性能分析 命令_mysql性能优化学习笔记-(4)性能分析

3e9fea85a500366c832e323db9c3cd3d.png

一、EXPLAIN命令分析

MySQL提供了一个EXPLAIN命令,它可以对select语句进行性能分析,并输出select执行的详细信息,以供开发人员进行分析优化。

如下,只需在SQL语句前面加上Explain命令即可。

c79d782a7401b6ea015c9049ca2a2df1.png

下面,我们来详细介绍Explain命令返回的各个字段的含义。

id:SELECT查询的标识符,每个SELECT都会自动分配一个唯一的标识符

select_type:SELECT查询的类型

table:查询哪个表

type:这个字段很重要,显示了查询使用了那种类型。

possible_keys:此次查询种可能选用的索引

key:此次查询使用到的索引

key_len:索引长度

ref:哪个字段或常数与key一起被使用

rows:显示此查询一共扫描了多少行,这个是一个估计值

extra:额外的信息

下面,我们来看看比较重要的几个字段含义:

1.select_type

查询的类型,常用取值如下:

simple:简单子查询,不包含子查询和union

primary:包含union或者子查询,最外层的部分标记为primary

subquery:一般子查询中的子查询被标记为subquery,也就是位于select列表中的查询

derived:派生表——该临时表是从子查询派生出来的,位于form中的子查询

union:位于union中第二个及其以后的子查询被标记为union,第一个就被标记为primary如果是union位于from中则标记为derived

union:result:用来从匿名临时表里检索结果的select被标记为union:result

dependent:union:顾名思义,首先需要满足UNION的条件,及UNION中第二个以及后面的SELECT语句,同时该语句依赖外部的查询

subquery:子查询中第一个SELECT语句

dependent subquery:和DEPENDENT:UNION相对UNION一样

2. type

查询类型从最好到最差依次为:cosnt、eq_reg、ref、range、index和ALL。

ALL 类型因为是全表扫描, 因此在相同的查询条件下, 它是速度最慢的.

而 index 类型的查询虽然不是全表扫描, 但是它扫描了所有的索引, 因此比 ALL 类型的稍快.

后面的几种类型都是利用了索引来查询数据, 因此可以过滤部分或大部分数据, 因此查询效率就比较高了

3. key_len

key_len表示mysql使用的建长度。在不损失精确性的情况下,长度越短越好。

4. rows

rows也是一个重要的字段。MySQL查询优化器根据统计信息,估算SQL要查找到结果需要扫描读取的数据行数。这个这段很直观显示了SQL的性能好坏,原则上rows越少越好。

5. extra

extra是EXPLAIN输出中一个很重要的字段,该列显示了MySQL在查询过程中的一些详细信息,MySQL查询器执行查询的过程中对查询计划的重要补充信息。

注意:看到Using filesort和Using temporary就要考虑对查询语句进行优化。

Using filesort当有Using filesort时,表示MySQL需要额外的排序操作,不能通过索引顺序达到排序效果。一般有using filesort都建议优化去掉,因为这样的查询CPU资源消耗很大。

Using temporary用临时表保存中间结果,常用于GROUP BY 和 ORDER BY操作中,一般看到它说明查询需要优化了,就算避免不了临时表的使用也要尽量避免硬盘临时表的使用。

Not existsMYSQL优化了LEFT JOIN,一旦它找到了匹配LEFT JOIN标准的行, 就不再搜索了。

Using index说明使用了覆盖索引,不需要回表读取数据行。

Using index condition这是MySQL 5.6出来的新特性,叫做“索引条件推送”。简单说一点就是MySQL原来在索引上是不能执行如like这样的操作的,但是现在可以了,这样减少了不必要的IO操作,但是只能用在二级索引上。

Using where使用了WHERE从句来限制哪些行将与下一张表匹配或者是返回给用户。

Using join buffer使用了连接缓存

impossible wherewhere子句的值总是false,不能用来获取任何元组

select tables optimized away在没有GROUP BY子句的情况下,基于索引优化MIN/MAX操作,或者对于MyISAM存储引擎优化COUNT(*)操作,不必等到执行阶段再进行计算,查询执行计划生成的阶段即完成优化。

distinct优化distinct操作,在找到第一匹配的元组后即停止找同样值的动作

打赏

2b1410f34de69074a6805f52b14ae4ff.png

7dc5255606cf929d77db205d0fb72433.png微信扫一扫,打赏作者吧~

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值