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

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

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

MySQL的explain语句用于对数据库优化器处理SQL的资源成本进行计算,可以通过该命令看出SQL在执行时所需要经历的一系列过程,通过执行结果可以看出SQL是通过索引查询还是遍历整个表等信息。该语句不会真正执行后面的SQL,所以不会担心占用系统资源,用于对SQL进行分析优化非常有用。


explain命令(也可以写为desc、describe)执行计划使用示例

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


explain执行计划返回结果

explain1.png


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

1、id:ID相同的SQL为一组,同组中的SQL按从上往下的顺序执行,而在所有组中ID越大优先级越高。

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

3、type:查询类型,分为全表扫描和索引扫描。按照执行效率从高到低为const(基于主键或者唯一索引)>eq_ref(多表查询中,非驱动表的链接条件是主键或者唯一索引)>ref(基于索引等值查询,比如包含了=的语句)>range(基于索引范围查询,比如包含了>、<、like、in、between、and、or的语句)>index(基于索引扫描)>all(全表扫描)。通常需要对ALL或者INDEX类型做优化

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

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

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

7、ref:显示索引哪一列被使用了

8、rows:表扫描的行数

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

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

已有 0/477 人参与

发表评论:

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

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