Explain使用简介

Explain使用简介

什么是explain

explain关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL。分析你的查询语句或是表结构性能瓶颈。

如何使用

explain SQL语句

返回的内容:
这里写图片描述

(1) id: select 查询的序列号,包含一组数字,表示查询中select子句或操作表顺序。
id相同,执行顺序由上至下。
id不同,如果是子查询,id序号会递增,id值越大优先级越高,越先执行。
id相同相同不同,id如果相同,可以认为是一组,从上往下顺序执行,在所有组中,id值越大优先级越高,越先执行。
(2) select_type 查询类型,主要用于区别普通查询,联合查询,子查询等复杂查询
主要包含:SIMPLE简单的select查询
PRIMARY查询中包含子查询最外层被标记。
SUBQUERY子查询
DERIVED衍生
UNION第二个select出现在UNION后被标记为UNION
UNION RESULT从UNION表获取结果的SELECT
(3) table 表名
(4) type 显示查询使用了何种类型,从最好到最差依次是: system>const>eq_ref>ref>range>index>All
system:表中只有一行数据(等于系统表) 是const类型特例,平时基本不会出现。
const:表示通过索引一次就找到,如将主键至于where语句后,mysql可以将查询转换为一个常量。
eq_ref:用索引进行扫描只有一条记录与之匹配。
ref:用索引进行扫描返回匹配某个单独值得所有行。
range:只检索给定范围的行,使用索引来选择行。
index:全索引扫描。
All:全表扫描。
(5)possible_keys 查询语句中可能使用到的索引,但不一定被查询实际使用。
(6)key 实际使用的索引,如果为null,则没有使用索引。查询中若使用覆盖索引,则该索引仅出现在key列中。
(7) key_len 索引字段的最大可能长度,并非实际使用长度。在不丢失精度情况下,长度越短越好。
(8) ref 显示哪一列索引被使用,哪些列或者常量用于查找索引列上的值。
(9) rows 大致估算出找出需要的数据所需要读取表中行数。越小越好。
(10) Extra 包含不适合在其他列显示,但比较重要的信息。

总结:能干什么

  1. 表的读取顺序
  2. 数据读取操作的操作类型
  3. 那些索引可以使用
  4. 那些索引被实际使用
  5. 表之间的引用
  6. 每张表有多少行被优化器查询

你可能感兴趣的:(MySQL)