在日常工作中,我们会有时会去查询一些执行时间比较久的SQL语句,EXPLAIN可以帮助开发人员分析SQL问题,查看该SQL语句有没有使用上了索引,有没有做全表扫描。explain显示了mysql如何使用索引来处理select语句以及连接表,可以帮助选择更好的索引和写出更优化的查询语句。
explain select * from demo
一、id
- id相同时,执行顺序由上至下
- 如果是子查询,id的序号会递增,id值越大优先级越高,越先被执行
- id如果相同,可以认为是一组,从上往下顺序执行;在所有组中,id值越大,优先级越高,越先执行
二、select_type
展示查询中每个select子句的类型
1.SIMPLE(简单SELECT,不使用UNION或子查询等)
2.PRIMARY(查询中若包含任何复杂的子部分,最外层的select被标记为PRIMARY)
3.UNION(UNION中的第二个或后面的SELECT语句)
4.DEPENDENT UNION(UNION中的第二个或后面的SELECT语句,取决于外面的查询)
5.UNION RESULT(UNION的结果)
6.SUBQUERY(子查询中的第一个SELECT)
7.DEPENDENT SUBQUERY(子查询中的第一个SELECT,取决于外面的查询)
8.DERIVED(派生表的SELECT,FROM子句的子查询)
9.UNCACHEABLE SUBQUERY(一个子查询的结果不能被缓存,必须重新评估外链接的第一行)
三、table
显示这一行的数据是关于哪张表的,有时不是真实的表名字,看到的是derivedx(x是个数字,我理解的是第几步执行的结果)
四、type
表示MySQL在表中找到所需行的方式,又称“访问类型”。
常用的类型有:ALL,index,range,ref,eq_ref,const,system,NULL(从左到右,性能从差到好)
ALL:Full Table Scan,MySQL将遍历全表以找到匹配的行
index:Full Index Scan,index与ALL区别为index类型只遍历索引树
网友评论