sql性能分析之explain详解

一、介绍

explain可以分析一条sql的优劣,通过mysql反馈我们,需要我们自己去读懂explain的sql执行结果来判断是否要进行优化,根据不同的业务和操作的数据量大小优化。

二、使用explain

mysql下执行:explain sql语句,比如 explain select t2.* from table2 t2;

返回结果显示

三、explain执行结果字段分析说明

1、通过id分析表的读取顺序,sql为:explain select t2.* from t1,t2,t3 where t1.id=t2.id and t1.id=t3.id and t1.other_column ='';

       id:相同,执行顺序由上而下

       id:不相同,子查询id序号递增,id值越大优先级越高,越先被执行。

       sql为:explain select t2.* from t2 where id=(select id from t1 where id=(select t3.id from t3 where t3.other_column=''));

        id:相同不同,id相同,可能认为是一组,从上往下顺序执行

        id值越大,优先级越高

        sql为:explain select t2.*from (select t3.id from t3 where t3.other_column='') s1,t2 where s1.id=t2.id;

2、select_type类型说明

【simple表示简单的select查询,查询语句不包含子查询或union】

【primary表示查询中包含复杂子部分,最外层查询标记为primary】

【subquery表示在select或where列表包含子查询】

【derived表示在from列表包含子查询被标记为衍生derived,mysql会递归这些子查询,把结果放到临时表里】

【出现第二个select出现在union之后,则被标记为union。若union包含在from子句的子查询中,外层select被标记为derived】                   

【union result从union表获取结果的select】

3、type:显示查询使用了何种类型【system>const>eq_ref>ref>range>index>ALL

 

4、Possible_keys:2个索引条件查询mysql,mysql自己可能用不到2个(实际中)

5、Key:实际使用到的索引,null就没有,查询到使用了覆盖索引,则该索引仅出现在key列表中

6、Key_len:表示索引中使用的字节数,可通过该列计算查询中使用索引的长度,不损失精度下越短越好,key_len显示的值为索引字段的最大可能长度,不是实际使用长度,查询条件越多越精确,但产生key长度越长

7、Ref:显示索引的哪一列被使用了,如果可能的话,是一个常数。哪些列或常量被用于查询索引列上的值

8、Rows:根据表统计信息及索引选用情况,大致估算出找到所需的记录所需要读取的行数(读取行判断有多少行被优化)

9、Extra

   9.1、using filesort:mysql会对数据使用一个外部的索引排序,不是按照表内索引顺序读取,mysql中无法利用索引完成的排序操作叫文件排序(言外之意:没有按照内部规则执行,mysql另起炉灶排序,危险)

    9.2、using temporary:使用临时表保存中间结果,mysql对查询结果排序使用临时表,常见于排序order by和分组查询gourp by,多索引情况,排序规则最好按照索引个数和顺序使用

    9.3、using index:

覆盖索引:复合索引c1、c2,刚好查询的select c1,c2,就不用去读取数据行,直接从索引上取得数据(或一部分满足)

    9.4、using where:使用了where过滤

    9.5、using join buffer:使用了连接缓存

    9.6、impossible where:

    9.7、select tables optimized away:  

    9.8、distinct:

  • 6
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值