MySQL的explain命令信息解析

简介

MySQL的explain命令用于SQL语句的查询执行计划(QEP),这条命令的输出结果可以让我们了解MySQL优化器是怎么执行这条SQL语句,我们可以从中分析可以优化SQL语句的途径。

语法:

explain [SQL语句]
分析SQL语句的执行信息,注意为了查看信息的时候,不影响表内的数据,查询delete或者insert等影响表内数据的SQL语句的时候,需要转换为select语句代为执行

explain [表名称]
相当于show create table [表名称]命令,查看该表的结构

explain命令信息

当我们使用explain [SQL语句]命令的时候,我们会观察到下面的输出结果:
MySQL的explain命令信息解析
而上面的每行信息代表的是什么的内容,对我们分析SQL语句时是十分重要的,下面就讨论一下每行的信息是什么:
id: 在QEP中展示的表的连续引用;
select_type : 表示table列引用的使用方式的类型;
        常见取值:
        SIMPLE:一个不包含子查询和其他复杂语法的简单查询
        PRIMARY:为复杂查询创建的首要表
        DERIVED:该表不是一个物理表
        UNION:这是union语句其中的一个SQL元素
table: explain命令输出结果中的一个单独行的唯一表示符;可能是一个表名,表的别名或者为查询产生的临时表名
type: QEP中指定的表使用的连接方式;
        常见连接方式 :
        const:这个表中最多只有一行匹配
        system:const的特例,当表只有一个row时
        ref:所有具有匹配的索引值的行都被用到
        range:所有符合一个给定范围的索引值都被用到
        ALL:需要进行一次全表扫描
possible_keys: 优化器为查询选定的索引
优化器可能选择了过多的索引,有些索引没有用到
key: 优化器选择使用的索引
key_len: SQL语句的连接条件的键的长度
ref: 那些用来进行索引比较的列或常量
rows: 得出结果可能要查询的行数目的MySQL优化器估计值。
Extra: 一些额外信息
        取值:
        Using where :查询使用了where语句来处理结果
        Using temporary:使用了内部临时表(基于内存)
        Using filesort :使用了order by 语句,CPU密集型的过程
        Using index:只需要使用索引就可以满足查询条件
        Impossible where: where语句可能是失效的
        Distinct:在找到第一行匹配的行之后就会停止搜索
       Uing join buffer:获取连接条件是没有使用索引,需要连接缓冲区来存储这个结果;意味着可以通过改善索引来改善性能

文章参考《Effective MySQL之SQL语句最优化》

注:如果本篇博客有任何错误和建议,欢迎伙伴们留言,你快说句话啊!

上一篇:(转)MySQL——SQL性能分析优化利器之Explain


下一篇:Dbeaver如何看Oralce执行计划?解决: explain plan FOR 无效? 执行计划的顺序怎么查看?