Mysql-Explain用法详解

Mysql-Explain用法详解文章目录 1 Explain 能干嘛 2 Explain 包含的表头信息 3 Explain id 表的读取顺序 3 1id 相同 3 2id 不同 3 3id 相同又不同 4 Explain Select type 数据读取操作的操作类型 5 Table6 Type7 possible keys 和 key 使用方式 Explain SQL 语句 1 Explain 能干嘛 2 Explain 包含的表头信息 3 Explain id 表的读取顺序 这里的 id 不是主键 它是一组数字 12345 这种 表示我们进行表

使用方式:Explain + SQL语句

1.Explain能干嘛

在这里插入图片描述

2.Explain包含的表头信息

在这里插入图片描述

3.Explain-id(表的读取顺序)

这里的id不是主键,它是一组数字12345这种,表示我们进行表查询的先后顺序,其中id可以有三种情况:id相同,id不同,id同时相同和不同

3.1 id相同

3.2 id不同

在这里插入图片描述

3.3 id相同又不同

在这里插入图片描述

4. Explain-Select_type(数据读取操作的操作类型)

5. Table

这个就不用多解释了,就是在explain显示后的数据中表示这一行的数据来自哪张表

6. Type

  • system:只有一行记录,相当于系统表,可以忽略不记
  • const:常量,表示通过索引一次就找到了,常用于匹配主键或者unique索引,值匹配一行数据
  • eq_ref:唯一性索引扫描,对于每个索引键,表中只有一条记录与之匹配
  • ref:非唯一性索引扫描,返回匹配到的某个值的所有行
  • range:只检索给定范围的行,一般情况下是where语句后加了between,>,<,in等条件
  • index和ALL:index遍历全部索引,ALL读全表,index比ALL块因为index从索引读取,ALL从硬盘读取

7. possible_keys和key

possible_keys:显示可能应用在这张表种的索引,一个或多个,但不一定被使用
Key:实际使用的索引,如果为NULL,则没有使用索引,若使用了覆盖索引,则该索引仅出现在Key列表种
覆盖索引
在这里插入图片描述


关于覆盖索引更详细的讨论请看:MySQL中最左原则和覆盖索引的讨论

8. Key_len

表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度,在不损失精度的情况下,长度越短越好

9. ref

10. rows

rows列显示MySQL认为它执行查询时必须检查的行数。注意这是一个预估值,越少越好

11. Extra

Extra是EXPLAIN输出中另外一个很重要的列,该列显示MySQL在查询过程中的一些详细信息,MySQL查询优化器执行查询的过程中对查询计划的重要补充信息。

类型 说明
Using filesort 说明mysql会对数据使用一个外部的索引排序,而不是按照表内的索引顺序进行读取,MySql中无法利用索引完成的排序操作称为”文件排序“
Using temporary 用临时表保存中间结果,常用于GROUP BYORDER BY操作中,一般看到它说明查询需要优化了,就算避免不了临时表的使用也要尽量避免硬盘临时表的使用。
Not exists MYSQL优化了LEFT JOIN,一旦它找到了匹配LEFT JOIN标准的行, 就不再搜索了。
Using index 说明查询是覆盖了索引的,不需要读取数据文件,从索引树(索引文件)中即可获得信息。如果同时出现using where,表明索引被用来执行索引键值的查找,没有using where,表明索引用来读取数据而非执行查找动作。这是MySQL服务层完成的,但无需再回表查询记录。
Using index condition 这是MySQL 5.6出来的新特性,叫做“索引条件推送”。简单说一点就是MySQL原来在索引上是不能执行如like这样的操作的,但是现在可以了,这样减少了不必要的IO操作,但是只能用在二级索引上。
Using where 使用了WHERE从句来限制哪些行将与下一张表匹配或者是返回给用户。注意:Extra列出现Using where表示MySQL服务器将存储引擎返回服务层以后再应用WHERE条件过滤。
Using join buffer 使用了连接缓存:Block Nested Loop,连接算法是块嵌套循环连接;Batched Key Access,连接算法是批量索引连接
impossible where where子句的值总是false,不能用来获取任何元组
select tables optimized away 在没有GROUP BY子句的情况下,基于索引优化MIN/MAX操作,或者对于MyISAM存储引擎优化COUNT(*)操作,不必等到执行阶段再进行计算,查询执行计划生成的阶段即完成优化。
distinct 优化distinct操作,在找到第一匹配的元组后即停止找同样值的动作


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/228540.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月16日 下午6:47
下一篇 2026年3月16日 下午6:47


相关推荐

  • Python 学习笔记 列表 range() xxx XXX

    Python 学习笔记 列表 range() xxx XXXPython学习笔记列表range()xxxXXXprint(“-“*30)forvalueinrange(1,5): print(value)numbers=list(range(1,6))print(numbers)even_numbers=list(range(2,11,2))print(even_numbers)squares=[]forvalueinr…

    2022年8月22日
    10
  • 并发编程之多线程

    一多线程的概念介绍threading模块介绍threading模块和multiprocessing模块在使用层面,有很大的相似性。二、开启多线程的两种方式11.创建线程的开销比创建进程的开销

    2022年3月29日
    40
  • c语言获取当前时间

    c语言获取当前时间首先介绍两个函数 1 intgettimeof structtimeva tv structtimezo tz 所属头文件 sys time h 其参数 tv 是保存获取时间结果的结构体 参数 tz 用于保存时区结果 structtimezo inttz minuteswest 格林威治时间往西方的时差 sys

    2026年3月19日
    2
  • Java教学视频下载(全集)

    Java教学视频下载(全集)1:四百本Java电子书下载链接:http://www.verycd.com/topics/2784992/2:蓝点在线Java视频教程http://you.video.sina.com.cn/a/1905723-1393828897/1/2.html3:J2EEWeb程序开发定向班V1.0Java就业班V2.0(完整版)http://www.verycd.com/topics/…

    2022年5月15日
    43
  • 一篇文章搞懂Java设计模式之责任链模式

    一篇文章搞懂Java设计模式之责任链模式简述 前端时间再看一些类库的源码 发现责任链模式的强大之处 尤其是和建造者模式的结合后强大的动态可扩展性更是牛逼的一塌糊涂 接下来赶紧了解一下吧 我们先来了解一下什么是责任链模式 职责链模式 ChainofRespo 使多个对象都有机会处理同一个请求 从而避免请求的发送者和接收者之间的耦合关系 将这些对象连成一条链 并沿着这条链传递该

    2026年3月20日
    2
  • 使用 VSCode 通过 Remote-SSH 连接远程服务器详细教程

    使用 VSCode 通过 Remote-SSH 连接远程服务器详细教程

    2026年3月16日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号