MySQL用法中对explain的用法和结果分析

发布时间:2020-07-08 10:11:45 作者:Leah
来源:亿速云 阅读:213

本篇文章和大家了解一下MySQL用法中对explain的用法和结果分析。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。

1. EXPLAIN简介

使用EXPLAIN关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句的。分析你的查询语句或是表结构的性能瓶颈。
➤  通过EXPLAIN,我们可以分析出以下结果:

使用方式如下:

EXPLAIN +SQL语句

EXPLAIN SELECT * FROM t1

执行计划包含的信息
MySQL用法中对explain的用法和结果分析

2. 执行计划各字段含义

2.1 id

select查询的序列号,包含一组数字,表示查询中执行select子句或操作表的顺序

id的结果共有3中情况

MySQL用法中对explain的用法和结果分析

2.2 select_type

常见和常用的值有如下几种:
MySQL用法中对explain的用法和结果分析
分别用来表示查询的类型,主要是用于区别普通查询、联合查询、子查询等的复杂查询。

2.3 table

指的就是当前执行的表

2.4 type

type所显示的是查询使用了哪种类型,type包含的类型包括如下图所示的几种:
MySQL用法中对explain的用法和结果分析
从最好到最差依次是:

system > const > eq_ref > ref > range > index > all

一般来说,得保证查询至少达到range级别,最好能达到ref。

2.5 possible_keys 和 key

possible_keys 显示可能应用在这张表中的索引,一个或多个。查询涉及到的字段上若存在索引,则该索引将被列出,但不一定被查询实际使用

key

2.6 key_len

表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度,在不损失精确性的情况下,长度越短越好。key_len显示的值为索引字段的最大可能长度,并非实际使用长度,即key_len是根据表定义计算而得,不是通过表内检索出的。
MySQL用法中对explain的用法和结果分析

2.7 ref

显示索引的那一列被使用了,如果可能的话,最好是一个常数。哪些列或常量被用于查找索引列上的值。
MySQL用法中对explain的用法和结果分析

2.8 rows

根据表统计信息及索引选用情况,大致估算出找到所需的记录所需要读取的行数,也就是说,用的越少越好
MySQL用法中对explain的用法和结果分析

2.9 Extra

包含不适合在其他列中显式但十分重要的额外信息

2.9.1 Using filesort(九死一生)

说明mysql会对数据使用一个外部的索引排序,而不是按照表内的索引顺序进行读取。MySQL中无法利用索引完成的排序操作称为“文件排序”。
MySQL用法中对explain的用法和结果分析

2.9.2 Using temporary(十死无生)

使用了用临时表保存中间结果,MySQL在对查询结果排序时使用临时表。常见于排序order by和分组查询group by。
MySQL用法中对explain的用法和结果分析

2.9.3 Using index(发财了)

表示相应的select操作中使用了覆盖索引(Covering Index),避免访问了表的数据行,效率不错。如果同时出现using where,表明索引被用来执行索引键值的查找;如果没有同时出现using where,表明索引用来读取数据而非执行查找动作。
MySQL用法中对explain的用法和结果分析
MySQL用法中对explain的用法和结果分析

2.9.4 Using where

表明使用了where过滤

2.9.5 Using join buffer

表明使用了连接缓存,比如说在查询的时候,多表join的次数非常多,那么将配置文件中的缓冲区的join buffer调大一些。

2.9.6 impossible where

where子句的值总是false,不能用来获取任何元组

SELECT * FROM t_user WHERE id = '1' and id = '2'

2.9.7 select tables optimized away

在没有GROUPBY子句的情况下,基于索引优化MIN/MAX操作或者对于MyISAM存储引擎优化COUNT(*)操作,不必等到执行阶段再进行计算,查询执行计划生成的阶段即完成优化。

2.9.8 distinct

优化distinct操作,在找到第一匹配的元组后即停止找同样值的动作

3. 实例分析

MySQL用法中对explain的用法和结果分析

以上就是MySQL用法中对explain的用法和结果分析的简略介绍,当然详细使用上面的不同还得要大家自己使用过才领会。如果想了解更多,欢迎关注亿速云行业资讯频道哦!

推荐阅读:
  1. sed的基本用法和高级用法
  2. MySQL和Redis事务的区别和用法

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

mysql explain 中对

上一篇:Redis适合做什么

下一篇:管理Hyper-V虚拟网络

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》