搬砖小弟
MySQL - explain详解
2019-07-14 / 3 min read
Explain详解
  1. ID列

    ID值不同时, 执行计划由ID大的向ID小读; ID值相同时, 执行计划由上到下读

  2. SELECT_TYPE列

    值 含义
    SIMPLE 不包含子查询或UNION操作的查询
    PRIMARY 查询中如果包含了子查询,那么最外层的查询会被标为primary
    SUBQUERY select列表中的子查询
    dependent subquery 依赖外部结果的子查询
    Union Union操作的第二个表之后的查询值为union
    Dependent union 当union作为子查询, 第二或第二个后的查询select_type
    Union result union产生的结果集
    Derived 出现在from子句中的子查询
  3. table列

    表的名称或者表的别名.

    unionM,N 由ID为M,N查询union产生的结果集

    derivedN or subqueryN 表示由ID为N的查询产生结果集

  4. partition列

    对于分区表, 显示查询的分区id; 非分区表显示NULL

  5. Type列

    查询中使用了联结的类型

    值 含义
    System 这是const联接类型中的一个特例, 当查询的表中只在一行显示
    const 表中有且只有一个匹配的行时使用, 如主键或者唯一索引的查询
    eq_ref 唯一索引或主键查找, 对于每个索引键, 表中只有一条记录与之匹配
    ref 非唯一索引查找, 返回匹配某个单独值的所有行
    ref_or_null 类似于ref类型的查询, 但是附加了对NULL值列的查询
    index_merge 表示使用了索引合并
    range 索引范围
    index Full index Scan全索引扫描,
    all 全表扫描
  6. Extra列

    值 含义
    Distinct 优化distinct操作, 找到第一匹配的元组后暂停找同样值的动作
    Not Exists 使用Not Exists来优化查询
    Using filesort 使用额外操作进行排序
    Using index 使用了覆盖索引进行查询
    Using temporary 需要使用临时表处理查询
    Using where 需要在服务层使用where条件过滤
    select tables optimized away 直接通过索引来获得数据, 不用访问表
  7. possible_keys 列

    指出MySQL能使用哪些索引来优化查询, 查询列所涉及的列上的索引都会被列出, 但不一定会被使用.

  8. Key列

    查询优化器优化查询实际所使用索引列

  9. Key_len列

    表示索引字段的最大可能长度

  10. ref列

    表示哪些列或常量被用于查询索引列上的值

  11. rows列

    表示MySQL通过索引统计信息, 估算的需要读取的行数, 是一个统计抽样结果, 并不十分准确

  12. filtered列

    表示返回结果的行数占需要读取行数的百分比, 值越大越好