MySQL 的 explain SQL调优工具的参数说明

用法:

explain select name from test where id = 32;

上述语句 explain 为工具 select 之后为sql语句
执行完毕后,通过控制台会打印出一个表。

其中会包含如下几个参数

id: 包含一组数字,表示查询中执行 select 子句 或 操作表的顺序。
如果 id 相同,则执行顺序由上到下。

select_type: 他有如下几个值,并且代表不同的意义。

simple 查询中,不包含自居或 union 。

primary 查询中若包含任何复杂子句查询,最外层查询被标记为 primary

subquery 在 select 或 where 列表中包含了子句查询,则该查询被标记
为subquery

deriverd 在 from 列表中包含的字句查询被标记为 deriverd(衍生)

union 若第二个 select 出现在 union 之后,则被标记为 derived。

union result 从 union 表中获取结果的 select 将被标记为 union result 。

type: (最有价值信息之一)

type
表示 MySQL 在表中找到所需行的方式,又称为 “访问类型” , 常见的
类型如下:

all , index, range, ref, eq_ref, const, system, null
以上类型,由左至右,由最差到最好。

all:
Full Table Scan, MySQL将便利全表以找到匹配的行。

index:
Full Index Scan, index 与 all 区别为 index 类型只遍历索引树,
假设,表中有主键字段 id,则 select id from table_name ,type
的类型为 Full Index Scan。

range:
索引扫描范围,对索引的扫描开始于某一点,返回匹配的域或行,常
见于 between, < ,>等的查询。

ref:
非唯一性索引扫描,将返回匹配某个单独值的所有行。常见于使用非唯
一索引的非唯一前缀的查找。

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

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

null:
MySQL 在优化过程中分解语句,执行时甚至不用访问表或索引,
举例如下: explain select from (select ftom t1 where id=1)d1;

possible_keys

possible_keys 将指出 MySQL 能使用哪个索引在表中找到行,查询设计的
字段上若存在索引,则该索引将被列出,但不一定会被查询使用。

key:(最有价值信息之二)
key 将显示 MySQL 在查询中实际使用的索引,若没有使用索引,则表示
为 null 。查询中若使用到了覆盖索引,则该索引仅仅出现在 key 列表中,
possble_keys 中并不显示。

key_len
key_len 表示索引中使用的字节数,可通过该列计算查询中使用的索引的
长度。

ref
ref 表示上述表的连接匹配条件,既哪些列或常量被用于查找索引列上的值。

rows: (最有价值信息之三)
rows 表示 MySQL 根据表统计信息几索引选用的情况,估算查询所需记录需要
读取的行数。使用到索引一般情况下,会是的 rows 的值降低。

Extra: (最有价值信息之四)
Extra 包含不适合在其他列中显示但十分重要的额外信息,可能包含
如下四种:

1.Using index
该值表示相应的 select 操作中,使用到了覆盖索引,包含满足查询
需要的数据的索引称之为覆盖索引。

2.Using where
如果查询未能使用索引,则 Using where 的作用只是提醒我们 MySQL
将用 where 子句来过滤结果集。

  1. Using temporary
    表示 MySQL 需要使用临时表来存储结果集,常见于 order by 与
    group by , 事实上 group by 会进行隐式的 order by 。

如果我们在 group by 时利用索引分组(其实包含排序的过程)排序,
则可以提高性能,因为不会此时查询输出里没有了 Using temporary,
Using filesort。

  1. Using filesort
    Using filesort 即文件排序, MySQL 中将无法使用索引来完成的
    排序操作。

注意:上述四个最有价值信息,是我们判断sql执行是否高县的基准。

整理自:https://www.imooc.com/article/17287

猜你喜欢

转载自blog.csdn.net/weixin_45956258/article/details/103350478