美文网首页
MySQL执行计划EXPLAIN解析

MySQL执行计划EXPLAIN解析

作者: 巴_扎_黑 | 来源:发表于2019-08-20 20:23 被阅读0次
    Explain 结果的几个主要字段解析:
    • id:select执行的顺序,id的值越select大执行的优先级越高,id为null的时候最后执行

    • select_type:查询类型,标识select查询的复杂度。简单查询:SIMPLE;复杂查询:SUBQURRY、PRIMARY、DERIVED
      1.SIMPLE:不包含子查询、不包含UNION;
      2.PRIMARY:最外层的查询;
      3.SUBQUERY:包含于select中的子查询,但不在from子句中;
      4.DERIVED:包含于from子句中的查询(改查询MySQL会将结果存放在临时表中,也称衍生表、派生表)。

    • table:标识当前select查询所相关的表。

    • type:衡量SQL查询扫描行记录的大概范围。常见的结果集优先级为:system > const > eq_ref > ref > range > index > ALL。一般情况下SQL查询结果集保持到range级别即可,最好是ref。如果查询级别达到了ALL,则需要进行SQL优化。
      1.system、const:相当于常量查询,表最多只有一条记录匹配。速度较快。system是const的特例,当表里只有一条元祖匹配是则type为system。
      2.eq_ref:primary key 或 unique key 索引的所有部分被连接使用 ,最多只会返回一条符合 条件的记录。这可能是在 const 之外最好的联接类型了,简单的 select 查询不会出现这种 type。
      3.ref::相比 eq_ref,不使用唯一索引,而是使用普通索引或者唯一性索引的部分前缀,索引要 和某个值相比较,可能会找到多个符合条件的行。
      4.range:范围查询(IN、BETWEEN、<、>等等),会使用一个索引来检索给定 范围的行。
      5.index:全索引扫描。
      6.ALL:全表扫描(通常需要优化)。

    • possible_keys:可能用到的索引。

    • key:当前查询用到的索引

    • key_len:用到索引的长度,如果是联合索引,可以推断所用用到了联合索引中的哪几个字段。

    • key:这一列显示了在key列记录的索引中,表查找值所用到的列或常量,常见的有:const(常 量)、字段名称

    • row:当前select查询的检索的大概范围行数,大于等于结果行。(此数值并不代表结果集行数)

    key_len长度计算:
    • 数值类型:
      1.tinyint:1字节;
      2.smallint:2字节;
      3.int:4字节
      4.bigint:8字节
    • 时间类型 
      1.date:3字节
      2.timestamp:4字节
      3.datetime:8字节
    • 字符串
      1.char(n):n字节长度
      2.varchar(n):2字节存储字符串长度,如果是utf-8,则长度 3 * n + 2
      注:索引最大长度是768字节,当字符串过长时,mysql会做一个类似左前缀索引的处理,将前半 部分的字符提取出来做索引。

    相关文章

      网友评论

          本文标题:MySQL执行计划EXPLAIN解析

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