美文网首页
explain命令含义详解

explain命令含义详解

作者: 愤愤的有痣青年 | 来源:发表于2019-10-31 17:24 被阅读0次

    explain命令是用来对sql语句进行分析的一个命令,可以通过此功能来对语句进行优化.其使用方式为
    explain <sql语句>,例如explain select * fom Order;
    执行后的返回值如下:

    explain执行结果

    其中,每列的含义如下:

    id:选择标识符
    select_type:表示查询的类型。
    table:输出结果集的表
    partitions:匹配的分区
    type:表示表的连接类型
    possible_keys:表示查询时,可能使用的索引
    key:表示实际使用的索引
    key_len:索引字段的长度
    ref:列与索引的比较
    rows:扫描出的行数(估算的行数)
    filtered:按表条件过滤的行百分比
    Extra:执行情况的描述和说明
    

    每项的具体内容如下:

    id

    索引的执行顺序,值越大越先执行,值相同时按照从上到下顺序执行.一般在子查询时有意义,其会返回多行数据,越里面的查询值越大.

    select_type

    简单的SELECT语句,不包括UNION(连接两个select结果集的关键字)操作或子查询操作.

    table

    当前操作的表名

    partitions

    type

    type所显示的是查询使用了哪种类型,其内心如下所示按快到慢排序:

    • const:常量查询,即查询的值和where的值都是同一个,且为唯一索引,这个时候扫描为直接匹配命中,其操作就类似于拿一个变量的值,速度极快.
    • ref:使用非唯一索引,对索引值的完全搜索,即若有多个索引值,这些索引值需要都在where中.
    • range:只检索给定范围的行.即对索引字段进行范围查询,可以为> <等匹配符号,也可以为between关键字,查询字段可以索引或非索引字段.
    • index: 通过索引匹配得到主键索引值,索引值为部分索引,此时会遍历索引树,然后回表查询得到数据.
    • all:无索引遍历整个表.

    possible_keys

    指出MySQL能使用哪个索引在表中找到记录,查询涉及到的字段上若存在索引,则该索引将被列出,但不一定被查询使用(该查询可以利用的索引,如果没有任何索引显示 null)

    Key

    在查询时实际上使用到的索引名,必然包含在possible_keys中.
    如果没有选择索引,键是NULL。要想强制MySQL使用或忽视possible_keys列中的索引,在查询中使用FORCE INDEX、USE INDEX或者IGNORE INDEX。

    key_len

    表示索引中使用的字节数,可通过该列计算查询中实际使用到的索引的长度(key_len显示的值为索引字段的最大可能长度,并非实际使用长度,即key_len是根据表定义计算而得,不是通过表内检索出的)
    不损失精确性的情况下,长度越短越好

    ref

    显示索引的哪一列被使用了,如果可能的话,最好是一个常数。哪些列或常量被用于查找索引列上的值。

    rows

    根据表统计信息及索引选用情况,大致估算出找到所需的记录所需要读取的行数,也就是说,用的越少越好.

    filtered

    Extra

    包含不适合在其他列中显式但十分重要的额外信息

    • Using temporary
      使用了用临时表保存中间结果,MySQL在对查询结果排序时使用临时表。常见于排序order by和分组查询group by。
    • Using index
      表示相应的select操作中使用了覆盖索引(Covering Index),避免访问了表的数据行,效率不错。如果同时出现using where,表明索引被用来执行索引键值的查找;如果没有同时出现using where,表明索引用来读取数据而非执行查找动作,例如按索引树顺序读取索引值,type一般为index。
    • Using where
      表明使用了where过滤
    • Using join buffer
      表明使用了连接缓存,比如说在查询的时候,多表join的次数非常多,那么将配置文件中的缓冲区的join buffer调大一些。
    • impossible where
      where子句的值总是false,不能用来获取任何元组,例如where a>1 and a<0
    • select tables optimized away
      在没有GROUPBY子句的情况下,基于索引优化MIN/MAX操作或者对于MyISAM存储引擎优化COUNT(*)操作,不必等到执行阶段再进行计算,查询执行计划生成的阶段即完成优化
    • distinct
      优化distinct操作,在找到第一匹配的元组后即停止找同样值的动作.

    相关文章

      网友评论

          本文标题:explain命令含义详解

          本文链接:https://www.haomeiwen.com/subject/omqtbctx.html