百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>数据库> MySQL中explain用途和效果剖析(详解)
分享文章到:

MySQL中explain用途和效果剖析(详解)

发布时间:09/01 来源:未知 浏览: 关键词:

1. EXPLAIN简介

使用EXPLAIN关键字可以模拟优化器施行SQL查询语句,从而知道MySQL是怎样处置你的SQL语句的。剖析你的查询语句或是表构造的机能瓶颈。
? 通过EXPLAIN,我们可以剖析出以下结果:

  • 表的读取次序
  • 数据读取操纵的操纵类型
  • 哪些索引可以使用
  • 哪些索引被实际使用
  • 表之间的援用
  • 每张表有多少行被优化器查询

? 使用方式如下:

EXPLAIN +SQL语句

EXPLAIN SELECT * FROM t1

施行方案包括的信息
这里写图片描述

2. 施行方案各字段含义

2.1 id

select查询的序列号,包括一组数字,表示查询中施行select子句或操纵表的次序

id的结果共有3中状况

  • id雷同,施行次序由上至下
    这里写图片描述
    [总结] 加载表的次序如上图table列所示:t1 t3 t2

  • id不一样,假如是子查询,id的序号会递增,id值越大优先级越高,越先被施行

这里写图片描述

  • id雷同不一样,同时存在
    这里写图片描述
    如上图所示,在id为1时,table显示的是 <derived2> ,这里指的是指向id为2的表,即t3表的衍生表。

2.2 select_type

常见和常用的值有如下几种:
这里写图片描述
离别用来表示查询的类型,主如果用于不同一般查询、结合查询、子查询等的复杂查询。

  • SIMPLE 简便的select查询,查询中不包括子查询或者UNION

  • PRIMARY 查询中若包括任何复杂的子部分,最外层查询则被标志为PRIMARY

  • SUBQUERY 在SELECT或WHERE列表中包括了子查询

  • DERIVED 在FROM列表中包括的子查询被标志为DERIVED(衍生),MySQL会递归施行这些子查询,把结果放在暂时表

  • UNION 若第二个SELECT显现在UNION之后,则被标志为UNION:若UNION包括在FROM子句的子查询中,外层SELECT将被标志为:DERIVED

  • UNION RESULT 从UNION表猎取结果的SELECT

2.3 table

指的就是当前施行的表

2.4 type

type所显示的是查询使用了哪品种型,type包括的类型包罗如下图所示的几种:
这里写图片描述
从最好到最差顺次是:

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

一样来说,得包管查询至少到达range级别,最好能到达ref。

  • system 表只要一行记载(等于系统表),这是const类型的特列,平常不会显现,这个也可以忽略不计
  • const 表示通过索引一次就寻到了,const用于比力primary key 或者unique索引。由于只匹配一行数据,所以很快。如将主键置于where列表中,MySQL就能将该查询转换为一个常量。
    这里写图片描述
    第一停止子查询得到一个结果的d1暂时表,子查询前提为id = 1 是常量,所以type是const,id为1的相当于只查询一笔记录,所以type为system。
  • eq_ref 独一性索引扫描,关于每个索引键,表中只要一笔记录与之匹配。常见于主键或独一索引扫描
  • ref 非独一性索引扫描,返回匹配某个独自值的所有行,本质上也是一种索引拜访,它返回所有匹配某个独自值的行,然而,它大概会寻到多个相符前提的行,所以他应当属于查寻和扫描的混合体。
    这里写图片描述
  • range 只检索给定范畴的行,使用一个索引来选中行,key列显示使用了哪个索引,一样就是在你的where语句中显现between、< 、>、in等的查询,这种范畴扫描索引比全表扫描要好,由于它只需要开端于索引的某一点,而完毕于另一点,不消扫描全部索引。
    这里写图片描述
  • index Full Index Scan,Index与All不同为index类型只遍历索引树。这平常比ALL快,由于索引文件平常比数据文件小。(也就是说虽然all和Index都是读全表,但index是从索引中读取的,而all是从硬盘读取的)
    这里写图片描述
    id是主键,所以存在主键索引
  • all Full Table Scan 将遍历全表以寻到匹配的行
    这里写图片描述

2.5 possible_keys 和 key

possible_keys 显示大概利用在这张表中的索引,一个或多个。查询触及到的字段上若存在索引,则该索引将被列出,但不必然被查询实际使用

key

  • 实际使用的索引,假如为NULL,则没有使用索引。(大概缘由包罗没有创立索引或索引失效)
    这里写图片描述
  • 查询中若使用了覆盖索引(select 后要查询的字段恰好和创立的索引字段完全雷同),则该索引仅显现在key列表中
    这里写图片描述
    这里写图片描述

2.6 key_len

表示索引中使用的字节数,可通过该列运算查询中使用的索引的长度,在不亏损准确性的状况下,长度越短越好。key_len显示的值为索引字段的最大大概长度,并非实际使用长度,即key_len是按照表定义运算而得,不是通过表内检索出的。
这里写图片描述

2.7 ref

显示索引的那一列被使用了,假如大概的话,最好是一个常数。哪些列或常量被用于查寻索引列上的值。
这里写图片描述

2.8 rows

按照表统计信息及索引选用状况,大致预算出寻到所需的记载所需要读取的行数,也就是说,用的越少越好
这里写图片描述

2.9 Extra

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

2.9.1 Using filesort(平安无事)

说明mysql会对数据使用一个外部的索引排序,而不是依照表内的索引次序停止读取。MySQL中没法利用索引完成的排序操纵称为“文件排序”。
这里写图片描述

2.9.2 Using temporary(十死无生)

使用了用暂时表留存中心结果,MySQL在对查询结果排序时使用暂时表。常见于排序order by和分组查询group by。
这里写图片描述

2.9.3 Using index(发财了)

表示响应的select操纵中使用了覆盖索引(Covering Index),幸免拜访了表的数据行,效力不错。假如同时显现using where,表白索引被用来施行索引键值的查寻;假如没有同时显现using where,表白索援用来读取数据而非施行查寻动作。
这里写图片描述
这里写图片描述

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. 实例剖析

这里写图片描述

  • 施行次序1:select_type为UNION,说明第四个select是UNION里的第二个select,最先施行【select name,id from t2】
  • 施行次序2:id为3,是整个查询中第三个select的一部分。因查询包括在from中,所认为DERIVED【select id,name from t1 where other_column=’’】
  • 施行次序3:select列表中的子查询select_type为subquery,为整个查询中的第二个select【select id from t3】
  • 施行次序4:id列为1,表示是UNION里的第一个select,select_type列的primary表示该查询为外层查询,table列被标志为<derived3>,表示查询结果来自一个衍生表,其中derived3中的3代表该查询衍生自第三个select查询,即id为3的select。【select d1.name …】
  • 施行次序5:代表从UNION的暂时表中读取行的阶段,table列的< union1,4 >表示用第一个和第四个select的结果停止UNION操纵。【两个结果union操纵】

引荐学习:mysql教程

以上就是MySQL中explain用途和结果剖析(详解)的具体内容,更多请关注百分百源码网其它相关文章!

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有151人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板