028-86922220

建站动态

根据您的个性需求进行定制 先人一步 抢占小程序红利时代

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

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

成都创新互联是一家专注于网站设计制作、做网站与策划设计,南溪网站建设哪家好?成都创新互联做网站,专注于网站建设十年,网设计领域的专业建站公司;建站业务涵盖:南溪等地区。南溪做网站价格咨询:13518219792

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的用法和结果分析的简略介绍,当然详细使用上面的不同还得要大家自己使用过才领会。如果想了解更多,欢迎关注创新互联行业资讯频道哦!


文章名称:MySQL用法中对explain的用法和结果分析
链接URL:http://www.tsicrk.com/article/gojcep.html

其他资讯

让你的专属顾问为你服务

2.9258s