Explain + SQL语句;程序员
如:Explain select * from user;web
会生成以下SQL分析结果,下面详细对每一个字段进行详解spring
是一组数字,表明多个表之间的查询顺序,或者包含子句查询语句中的顺序,id总共分为三种状况,依次详解sql
select_type包含如下几种值数据库
简单的select查询,查询中不包含子查询或者union查询缓存
若是SQL语句中包含任何子查询,那么子查询的最外层会被标记为primary微信
在select或者where里包含了子查询,那么子查询就会被标记为subQquery,同三.二同时出现性能
在from中包含的子查询,会被标记为衍生查询,会把查询结果放到一个临时表中学习
若是有两个select查询语句,他们之间用union连起来查询,那么第二个select会被标记为union,union的结果被标记为union result。它的id是为null的优化
表示这一行的数据是哪张表的数据
type是表明MySQL使用了哪一种索引类型,不一样的索引类型的查询效率也是不同的,type大体有如下种类
表中只有一行记录,system是const的特例,几乎不会出现这种状况,能够忽略不计
将主键索引或者惟一索引放到where条件中查询,MySQL能够将查询条件转变成一个常量,只匹配一行数据,索引一次就找到数据了
在多表查询中,如T1和T2,T1中的一行记录,在T2中也只能找到惟一的一行,说白了就是T1和T2关联查询的条件都是主键索引或者惟一索引,这样才能保证T1每一行记录只对应T2的一行记录
举个不太恰当的例子,EXPLAIN SELECT * from t1 , t2 where t1.id = t2.id
不是主键索引,也不是惟一索引,就是普通的索引,可能会返回多个符合条件的行。
体如今对某个索引进行区间范围检索,通常出如今where条件中的between、and、<、>、in等范围查找中。
将全部的索引树都遍历一遍,查找到符合条件的行。索引文件比数据文件仍是要小不少,因此比不用索引全表扫描仍是要快不少。
没用到索引,单纯的将表数据所有都遍历一遍,查找到符合条件的数据
这次查询中涉及字段上若存在索引,则会被列出来,表示可能会用到的索引,但并非实际上必定会用到的索引
这次查询中实际上用到的索引
表示索引中使用的字节数,经过该属性能够知道在查询中使用的索引长度,注意:这个长度是最大可能长度,并不是实际使用长度,在不损失精确性的状况下,长度越短查询效率越高
显示关联的字段。若是使用常数等值查询,则显示const,若是是链接查询,则会显示关联的字段。
#1.tb_emp表为非惟一性索引扫描,实际使用的索引列为idx_name,因为tb_emp.name='rose'为一个常量,因此ref=const。
#2.tb_dept为惟一索引扫描,从sql语句能够看出,实际使用了PRIMARY主键索引,ref=db01.tb_emp.deptid表示关联了db01数据库中tb_emp表的deptid字段。
根据表信息统计以及索引的使用状况,大体估算说要找到所需记录须要读取的行数,rows越小越好
不适合在其余列显示出来,但在优化时十分重要的信息
(1)using fileSort(重点)
俗称 " 文件排序 " ,在order by或者在group by排序的过程当中,order by的字段不是索引字段,或者select查询字段存在不是索引字段,或者select查询字段都是索引字段,可是order by字段和select索引字段的顺序不一致,都会致使fileSort
(2)using temporary(重点)
使用了临时表保存中间结果,常见于order by和group by中。
(3)USING index(重点)
表示相应的select操做中使用了覆盖索引(Coveing Index),避免访问了表的数据行,效率不错!
若是同时出现using where,代表索引被用来执行索引键值的查找;若是没有同时出现using where,表面索引用来读取数据而非执行查找动做。
(4) Using where
代表使用了where过滤
(5) using join buffer
使用了链接缓存
(6) impossible where
where子句的值老是false,不能用来获取任何元组
(7) select tables optimized away
在没有GROUPBY子句的状况下,基于索引优化MIN/MAX操做或者
对于MyISAM存储引擎优化COUNT(*)操做,没必要等到执行阶段再进行计算,
查询执行计划生成的阶段即完成优化。
(8) distinct
优化distinct,在找到第一匹配的元组后即中止找一样值的工做
回复Java全套教程,便可领取:Java基础、Java web、JavaEE所有的教程,包括spring boot等
回复:简历模板,便可获取100份精美简历
回复:Java学习路线,便可获取最新最全的一份学习路线图
回复:Java电子书,便可领取13本顶级程序员必读书籍