MySQL 执行计划 explain

一、语法

explain select ... ...

二、示例:

简单查询

包含子查询

三、各字段说明:

1、id:SQL的执行顺序,从大到小执行,如果id相同,则从上往下执行。

2、select_type:查询类型,有以下几种:

      SIMPLE:简单select,不使用UNION和子查询。

      PRIMARY:查询中若包含任何复杂的子部分,最外层查询则被标记为:PRIMARY

      UNION

      DEPENDENT UNION

      UNION RESULT:从UNION表获取结果的SELECT被标记为:UNION RESULT

      SUBQUERY:在SELECT或WHERE列表中包含了子查询,该子查询被标记为:SUBQUERY

      DEPENDENT SUBQUERY

      DERIVED:在FROM列表中包含的子查询被标记为:DERIVED,若第二个SELECT出现在UNION之后,则被标记为UNION;若UNION包含在? FROM子句的子查询中,外层SELECT将被标记为:DERIVED

3、table:查询的哪张表

4、type:使用的那种查询类型,从最好到最差的连接类型为const、system、eq_reg、ref、range、index和ALL

      ALL:全表扫描,从头到尾扫描整张表。

      index:全索引扫描,按索引次序扫描表,其实还是全表扫描,主要优点是避免了排序,因为索引是排好序的。

      range:索引范围扫描

      ref:非唯一性索引扫描,返回匹配某个单独值的所有行

      eq_ref:唯一性索引扫描,对于每个索引键,表中只有一条记录与之匹配。常见于主键或唯一索引扫描

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

5、possible_keys:当前查询能使用的索引

6、key:实际查询使用的索引。

7、key_len:使用的索引的长度,在不损失精确性的情况下,越短越好。

8、ref:用于连接查询,表示具体某个表的某列被引用。

9、rows:MySQL根据表统计信息及索引选用情况,估算的找到所需的记录所需要读取的行数,这个值是不准确的,只有参考意义。

10、Extra:其他详细信息,含义:显示一些辅助的额外信息

      a.Using index,表示使用了索引

      b.Using where,表示通过where条件过滤

      c.Using temporary,表示使用了临时表,常见于分组和排序

      d.Using filesort,表示无法使用索引排序,需要文件排序

四、mysql执行计划的局限

  1、EXPLAIN不会告诉你关于触发器、存储过程的信息或用户自定义函数对查询的影响情况

  2、EXPLAIN不考虑各种Cache

  3、EXPLAIN不能显示MySQL在执行查询时所作的优化工作

  4、部分统计信息是估算的,并非精确值

  5、EXPALIN只能解释SELECT操作,其他操作要重写为SELECT后查看执行计划


 
 

猜你喜欢

转载自huangqiqing123.iteye.com/blog/2195792