IT老哥,一个在大厂做高级Java开发的程序员,每天分享技术干货文章
前言:这篇文章主要讲 explain 如何使用,还有 explain 各种参数概念,之后会讲优化
Explain + SQL 语句;
如:Explain select * from user;
会生成如下 SQL 分析结果,下面详细对每个字段进行详解
是一组数字,代表多个表之间的查询顺序,或者包含子句查询语句中的顺序,id 总共分为三种情况,依次详解
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,如果是连接查询,则会显示关联的字段。
根据表信息统计以及索引的使用情况,大致估算说要找到所需记录需要读取的行数,rows 越小越好
不适合在其他列显示出来,但在优化时十分重要的信息
俗称 " 文件排序 " ,在数据量大的时候几乎是“九死一生”,在 order by 或者在 group by 排序的过程中,order by 的字段不是索引字段,或者 select 查询字段存在不是索引字段,或者 select 查询字段都是索引字段,但是 order by 字段和 select 索引字段的顺序不一致,都会导致 fileSort
使用了临时表保存中间结果,常见于 order by 和 group by 中。
表示相应的 select 操作中使用了覆盖索引(Coveing Index),避免访问了表的数据行,效率不错!
如果同时出现 using where,表明索引被用来执行索引键值的查找;如果没有同时出现 using where,表面索引用来读取数据而非执行查找动作。
表明使用了 where 过滤
使用了连接缓存
where 子句的值总是 false,不能用来获取任何元组
在没有 GROUPBY 子句的情况下,基于索引优化 MIN/MAX 操作或者
对于 MyISAM 存储引擎优化 COUNT(*)操作,不必等到执行阶段再进行计算,
查询执行计划生成的阶段即完成优化。
优化 distinct,在找到第一匹配的元组后即停止找同样值的工作
云服务器,云硬盘,数据库(包括MySQL、Redis、MongoDB、SQL Server),CDN流量包,短信流量包,cos资源包,消息队列ckafka,点播资源包,实时音视频套餐,网站管家(WAF),大禹BGP高防(包含高防包及高防IP),云解析,SSL证书,手游安全MTP,移动应用安全、 云直播等等。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。