美文网首页
MySql--Explain 详解(上)

MySql--Explain 详解(上)

作者: 简书徐小耳 | 来源:发表于2019-05-17 17:34 被阅读0次

    具体细节 请去掘金购买《MySQL 是怎样运行的:从根儿上理解 MySQL》

    EXPLAIN

    EXPLAIN语句输出形式

    • 1.id:在一个大的查询语句中每个SELECT关键字都对应一个唯一的id
    • 2.select_type: SELECT关键字对应的那个查询的类型
    • 3.table:表名
    • 4.partitions:匹配的分区信息
    • 5.type:针对单表的访问方法
    • 6.possible_keys:可能用到的索引
    • 7.key: 实际上使用的索引
    • 8.key_len:实际使用到的索引长度
    • 9.ref:当使用索引列等值查询时,与索引列进行等值匹配的对象信息
    • 10.rows:预估的需要读取的记录条数
    • 11.filtered:某个表经过搜索条件过滤后剩余记录条数的百分比
    • 12.Extra:一些额外的信息

    table

    • 1.EXPLAIN语句输出的每条记录都对应着某个单表的访问方法,该条记录的table列代表着该表的表名

    id

    • 1.对于包含UNION的语句,每一个select 就对应一个id
    • 2.在连接查询的执行计划中,每个表都会对应一条记录,这些记录的id列的值是相同的,出现在前边的表表示驱动表,出现在后边的表表示被驱动表
    • 3.一般包含子查询的id是不一样的
    • 4.查询优化器可能对涉及子查询的查询语句进行重写,从而转换为连接查询。这时候id就一样了。
    • 5.UNION会生成一个临时表,对结果进行去重。这个时候id为NULL

    select_type

    • 1.每一个SELECT关键字代表的小查询都定义了一个称之为select_type的属性
    • 2.SIMPLE:查询语句中不包含UNION或者子查询的查询都算作是SIMPLE类型
    • 3.PRIMARY:对于包含UNION、UNION ALL或者子查询的大查询来说,它是由几个小查询组成的,其中最左边的那个查询的select_type值就是PRIMARY
    • 4.UNION:对于包含UNION或者UNION ALL的大查询来说,它是由几个小查询组成的,其中除了最左边的那个小查询以外,其余的小查询的select_type值就是UNION
    • 5.UNION RESULT:MySQL选择使用临时表来完成UNION查询的去重工作,针对该临时表的查询的select_type就是UNION RESULT
    • 6.SUBQUERY:如果包含子查询的查询语句不能够转为对应的semi-join的形式,并且该子查询是不相关子查询,并且查询优化器决定采用将该子查询物化的方案来执行该子查询
    • 7.DEPENDENT SUBQUERY: 如果包含子查询的查询语句不能够转为对应的semi-join的形式,并且该子查询是相关子查询,则该子查询的第一个SELECT关键字代表的那个查询的select_type就是DEPENDENT SUBQUERY
    • 8.DEPENDENT UNION:在包含UNION或者UNION ALL的大查询中,如果各个小查询都依赖于外层查询的话,那除了最左边的那个小查询之外,其余的小查询的select_type的值就是DEPENDENT UNION
    • 9.DERIVED:采用物化的方式执行的包含派生表的查询
    • 10.MATERIALIZED:当查询优化器在执行包含子查询的语句时,选择将子查询物化之后与外层查询进行连接查询
    • 11.UNCACHEABLE SUBQUERY
    • 12.UNCACHEABLE UNION
    • 13.select_type为DEPENDENT SUBQUERY的查询可能会被执行多次

    type

    • 1.代表访问一条记录的方法是什么样的
    • 2.具体的访问方法以前写过 可以参考:https://www.jianshu.com/p/2afee5496e61

    possible_keys和key

    • 1.前者列出查询时候可能用到的索引
    • 2.后者代表实际的索引
    • 3.使用index访问方法来查询某个表时,possible_keys列是空的,而key列展示的是实际使用到的索引
    • 4.possible_keys列中的值并不是越多越好,可能使用的索引越多,查询优化器计算查询成本时就得花费更长时间,所以如果可以的话,尽量删除那些用不到的索引
    • 5.key_len:索引的长度

    ref

    • 1.索引列等值匹配的条件去执行查询时,也就是在访问方法是const、eq_ref、ref、ref_or_null、unique_subquery
      、index_subquery其中之一时,ref列展示的就是与索引列作等值匹配的东西(常数或者列或者函数)

    rows

    • 1.代表预计需要扫描的行数或者索引记录行数

    相关文章

      网友评论

          本文标题:MySql--Explain 详解(上)

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