搬砖小弟
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列

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