本站所有文章均为原创,如对您有帮助,恳请帮忙点击任何一处广告
  • 首页
  • MySQL
  • 【MySQL运维】使用explain执行计划对SQL进行分析优化

【MySQL运维】使用explain执行计划对SQL进行分析优化

发布:TangLu2020-6-17 12:54分类: MySQL 标签: mysql

一、执行计划的作用

执行计划是用于计算数据库优化器处理SQL的资源成本,在MySQL中使用执行计划的命令是explain(也可以写为desc、describe),通过该命令可以查看SQL在真正执行时所需要经历的一系列过程,通过执行结果可以看出SQL是通过索引查询还是遍历整个表等信息。执行计划命令所带的SQL并不会真正执行,所以不会担心占用系统资源,用于对SQL进行分析优化非常有用。如下示例:

mysql > EXPLAIN SELECT id,name FROM table;  #explain后面接上SQL即可


二、explain执行计划返回结果

explain1.png


explain执行计划分为了多列,以下是各列的说明:

· idSELECT语句的编号,如果存在子查询则编号递增,ID大的SQL会优先执行,ID相同的SQL为一组,同组中的SQL按从上往下的顺序执行。

· select_type:查询类型,SIMPLE为不包含UNION或子查询的简单查询;PRIMARY为如果包含关联查询或子查询,则最外层的查询标记为PRIMARY;UNION为联合查询中第二个以及后面的查询;SUBQUERY为子查询中第一个SELECT

· table:SQL所涉及到的表,一条SQL可能会涉及多张表,可以看这个分析具体是查哪张表有问题

· type:查询类型。按照执行效率从高到低为const(基于主键或者唯一索引查询,最多返回一条记录)、eq_ref(多表查询时是基于主键或非空唯一索引完成扫描、ref(基于普通索引等值查询,比如包含了=的语句)、range(基于索引范围查询,比如包含了>、<、like、in、between、and、or的语句)、index(全索引扫描)、all(全表扫描)。通常需要对ALL或者INDEX类型做优化

· possible_keys:可能会被应用的索引,如果为空代表没有索引

· key:相比possible_keys,这列显示了SQL实际用到的索引

· key_len:索引长度,主要是对联合索引进行分析,越短越好,通常大于100需要优化

· ref:多表查询时表之间字段引用关系,显示索引哪一列被使用了

· rows:表扫描的行数

· filtered存储引擎返回的数据在服务器层过滤之后剩下满足查询记录数的比例

· extra:扩展列,标记了查询过程的详细解释。如果出现以下两种情况代表需要优化SQL语句:Using filesort代表此查询使用到了文件排序,比如order by、group by语句,此类查询比较消耗CPU,建议建立联合索引;Using temporary说明用到了临时表来存储结果,这通常发生在对不同的列进行ORDER BY上,而不是GROUP BY上。

温馨提示如有转载或引用以上内容之必要,敬请将本文链接作为出处标注,谢谢合作!
et_highlighter51
版权所有:《Linux运维技术学习站点
文章标题:《【MySQL运维】使用explain执行计划对SQL进行分析优化
除非注明,文章均为 《Linux运维技术学习站点》 原创
转载请注明本文短网址:http://www.linuxe.cn/post-595.html  [生成短网址]

已有 0/892 人参与

发表评论:

欢迎分享Linux运维技术学习站点

欢迎使用手机扫描访问本站,还可以关注微信哦~