MySQL性能分析之explain的使用

来源:互联网 发布:usr share mysql 编辑:程序博客网 时间:2024/06/03 23:56

  众所周知,在我们编程过程中肯定避免不了写SQL来进行增删改查,学会如何写SQL很容易,但是写好一个SQL缺并不简单,因为我们所编写的SQL有时候目的是达到了,但是却特别消耗数据库的性能,这就是我们写的稍微有些问题,接下来我们就来学习一下MySQL中的性能分析explain的相关知识点。

  首先我们需要学会使用explain去分析我们的SQL语句,.使用explain语句去查看分析结果

如explain select * from test1 where id=1;

  其次我们使用了之后会在命令界面中出现如下图片的列,我们就需要明白这些列都是干什么的


会出现:id  selecttype  table  type possible_keys  key key_len  ref rows  extra各列,接下来就让我们来分析一下各列的含义


id:select查询的序列号,包含一组数字,表示查询中执行select子句或操作表的顺序,它有三种情况:

①id相同,执行顺序由上至下;

②id不同,如果是子查询,id的序号会递增,id值越大优先级越高,越先被执行;

③id既存在相同也存在不同。


select_type:select查询的类型,主要是区别普通查询和联合查询、子查询之类的复杂查询,它有六种情况:

①SIMPLE:简单的select查询,查询中不包含子查询或者UNION

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

③SUBQUERY:在SELECT或WHERE列表中包含了子查询

④DERIVED:在FROM列表中包含的子查询被标记为DERIVED(衍生),MySQL会递归执行这些子查询,把结果放在临时表里

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

⑥UNION RESULT:从UNION表获取结果的SELECT


table:显示这一行数据是关于哪张表的


type:显示的是访问类型,是较为重要的一个指标,结果值从好到坏依次是:  

  system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL

  一般来说,得保证查询至少达到range级别,最好能达到ref。


possible_keys:指出MySQL能使用哪个索引在该表中找到行。如果是空的,没有相关的索引。这时要提高性能,可通过检验WHERE子句,看是否引用某些字段,或者检查字段不是适合索引。


key:显示MySQL实际决定使用的键。如果没有索引被选择,键是NULL。


key_len:显示MySQL决定使用的键长度。如果键是NULL,长度就是NULL。文档提示特别注意这个值可以得出一个多重主键里mysql实际使用了哪一部分。


ref:显示哪个字段或常数与key一起被使用。

rows:这个数表示mysql要遍历多少数据才能找到,在innodb上是不准确的。

Extra:如果是Only index,这意味着信息只用索引树中的信息检索出的,这比扫描整个表要快。

  关于MySQL性能分析及explain用法的知识就介绍到这里了,希望本次的介绍能够对您有所收获!