Mysql Explain工具介绍
1.Explain的使用
Explain select * from tb_test;
查询结果如下图:
2.Explain分析
select_type:
这个字段意思是查询类型,它有很多个值,这里就只介绍几种常见的值:
(1)simple: 简单查询不包含子查询或union;
(2)primary: 复杂查询最层的select;
(3)subquery: 在from之前的子查询;
(4)derived: 在from之后的子查询(相当于是创建了一个临时表);
例子:
EXPLAIN select (select 1 from tb_test where id = 1) from (select id from tb_user where id = 1) der;
如上图可见select_type里每一个字段后面table里面就是对应的他查询的表,而且上面的sql语句查询的顺序会根据查询的出来的结果id最大的优先查询,这里查出来的id有可能还是一样的,如果是一样的,就从上往下依次查询。
type:
这个字段个人觉得在这explain分析里面是比较重要的,可根据他的值进行sql优化,他的几个常见的值是 system<const<eq_ref<ref<range<index<all
一般来说得保证sql查询达到range级别,最好能优化到red。
(1)system、const:这两种级别查询效率是非常高了,const就是通过主键索引精准查询,而system可以说是const的一种特殊情况其实是const一种特殊情况,表里只有一条元组匹配时为system ,
EXPLAIN select * from (select * from tb_test WHERE id = 1) sub
(2)eq_ref:primary key 或 unique key 索引关联查询时,如:
EXPLAIN select ur.* from user_role ur
left join role r on r.id = ur.role_id
(3)ref:它与eq_ref的主要区别就是,ref是用的不是唯一索引,例如:
EXPLAIN select * from user where name = 'zyl'