mysql中explain中的参数的分析

前言:          

        explain通常用于查看一个这些SQL语句的执行计划,查看该SQL语句有没有使用上了索引,有没有做全表扫描,让我们能清楚的分析sql是否需要进行优化

使用方法:

          再查询语句的前面加上 EXPLAIN就OK啦!例如:

  • id: SELECT 查询的标识符. 每个 SELECT 都会自动分配一个唯一的标识符.

    (1) id相同时,执行顺序由上至下

    (2) 如果是子查询,id的序号会递增,id值越大优先级越高,越先被执行

    (3)id如果相同,可以认为是一组,从上往下顺序执行;在所有组中,id值越大,优先级越高,越先执行

  • select_type: SELECT 查询的类型

       (1) SIMPLE(简单SELECT,不使用UNION或子查询等)

       (2) PRIMARY(查询中若包含任何复杂的子部分,最外层的select被标记为PRIMARY)

       (3) UNION(UNION中的第二个或后面的SELECT语句)

       (4) DEPENDENT UNION(UNION中的第二个或后面的SELECT语句,取决于外面的查询)

       (5) UNION RESULT(UNION的结果)

       (6) SUBQUERY(子查询中的第一个SELECT)

       (7) DEPENDENT SUBQUERY(子查询中的第一个SELECT,取决于外面的查询)

       (8) DERIVED(派生表的SELECT, FROM子句的子查询)

       (9) UNCACHEABLE SUBQUERY(一个子查询的结果不能被缓存,必须重新评估外链接的第一行)

  • table: 查询的是哪个表

  • partitions: 匹配的分区

  • type: join 类型

       常用的类型有: ALL, index,  range, ref, eq_ref, const, system, NULL(从左到右,性能从差到好)

       (1) ALL:进行了全表扫描。

       (2) index: 全索引扫描。

       (3) range:有范围的索引扫描。相对于index的全索引扫描,它有范围限制,因此要优于index。关于range比较容易理解,需要记住的                是出现了range,则一定是基于索引的。同时除了显而易见的between,and以及'>','<'外,in和or也是索引范围扫描。

       (4) ref:  查找条件列使用了索引而且不为主键和unique。其实,意思就是虽然使用了索引,但该索引列的值并不唯一,有重复。                         这样即使使用索引快速查找到了第一条数据,仍然不能停止,要进行目标值附近的小范围扫描。

       (5) eq_ref: 类似ref,区别就在使用的索引是唯一索引,对于每个索引键值,表中只有一条记录匹配,简单来说,就是多表连接中使用         primary key或者 unique key作为关联条件

       (6) const、system: 当MySQL对查询某部分进行优化,并转换为一个常量时,使用这些类型访问。如将主键置于where列表中,                       MySQL就能将该查询转换为一个常量,system是const类型的特例,当查询的表只有一行的情况下,使用system

       (7) NULL: MySQL在优化过程中分解语句,执行时甚至不用访问表或索引

  • possible_keys: MySQL能使用哪个索引在该表中找到行

  • key: 此次查询中确切使用到的索引.

  • ref: 显示使用哪个列或常数与key一起从表中选择行。

  • rows: 显示此查询一共扫描了多少行. 这个是一个估计值.

  • extra: 额外的信息

    

猜你喜欢

转载自blog.csdn.net/xu12387/article/details/87709003