热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

MySQL执行计划解读

1.explainextendedselect.....将执行计划反编译成SELECT语句,运行showwarnings可得到被MYSQL优化器优化后的查询语句。2.explainpartitionsselect....用于分区表的EXPLAIN3.执行计划包含的信息idselect_typetabletypepossible_keyskey

1. explain extended select ..... 将执行计划反编译成SELECT 语句,运行 show warnings 可得到被MYSQL优化器优化后的查询语句。 2. explain partitions select .... 用于分区表的EXPLAIN 3.执行计划包含的信息 id select_type table type possible_keys key

1. explain extended select .....
将执行计划反编译成SELECT 语句,运行 show warnings 可得到被MYSQL优化器优化后的查询语句。

2. explain partitions select ....
用于分区表的EXPLAIN

3.执行计划包含的信息
id select_type table type possible_keys key key_len ref rows extra


3.1 id: 包含一组数字,表示查询中执行select 子句或操作表的顺序。
id如果相同,可以认为是一组,从上往下顺序执行;在所有组中,ID值越大,优先级越高,越先执行。
3.2 select_type : 表示查询中每个select 子句的类型(简单OR复杂)
a. simple: 查询中不包含子查询或者union
b. 查询中若包含任何复杂的子部份,最外层查询则被标记为:primary
c. 在SELECT或WHERE 列表中包含了子查询,该子查询被标记为:SUBQUERY
d.在FROM 列表中包含的子查询被标记为:DERIVED
e. 若第二个SELECT出现在UNION之后,则被标记为UNION 若UNION包含在FROM子句的子查询中,外层SELECT将被标记为:DERIVED
f. 从UNION表获取结果的SELECT被标记为:UNION RESULT

3.3 type: 表示MYSQL 在表中找到所需行的方式,又称“访问类型”,常见类型如下:
all index range ref eq_ref const, system null
由左至右,由最差到最好
a. ALL: FULL TABLE SCAN , MYSQL 将遍历全表以找到匹配的行
b. INDEX: FULL INDEX SCAN, INDEX与ALL区别为INDEX类型只遍历索引
c. RANGE:索引范围扫描,对索引的扫描开始于某一点,返回匹配值域的行,常见于 between, <,> 等的查询。
d.REF: 非唯一性索引扫描,返回匹配某个单独值的所有行,常见于使用非唯一索引即唯一索引的非唯一前缀进行的查找。
e.EQ_REF: 唯一性索引扫描,对于每个索引键,表中只有一条记录与之匹配。常见于主键或唯一索引扫描。
f. CONST, SYSTEM: 当MYSQL 对查询某部份进行优化,并转换为一个常量时,使用这些类型访问,如将主键置于WHERE列表中,MYSQL就能将该查询转换成一个常量。 SYSTEM是CONST类型的特例,当查询的表只有一行的情况下,使用SYSTEM
g.NULL: MYSQL 在优化过程中分解语句,执行时甚至不用访问表或索引。

3.4 possible_keys
指出MYSQL 能使用哪个索引在表中找到行,查询涉及到的字段上若存在索引,则该索引将被列出,但不一定被查询使用。

3.5 key
显示MYSQL 在查询中实际使用的索引,若没有使用索引,显示为NULL, 如果用了覆盖索引,则该索引公出现在KEY列表中。

3.6 key_len
表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度。key_len显示的值为索引字段的最大可能长度,并非实际使用长度,即KEY_LEN是根据表定义计算而得,不是通过表内检索出的。

3.7 ref
表示上述表的连接匹配条件,即哪些列或常量被用于查找索引列上的值。

3.8 rows
表示MYSQL 根据表统计信息及索引选用情况,估算的找到所需的记录所需要读取的行数。

3.9 extra: 包含不适合在其他列中显示但十分重要的额外信息。
A. USING INDEX: 该值表示相应的SELECT操作中使用了覆盖索引(COVERING INDEX)
覆盖索引:MYSQL 可以利用索引返回SELECT列表中的字段,而不必根据索引再次读取数据文件。
包含所有满足查询需要的数据的索引称为覆盖索引
注:如果要使用覆盖索引,一定要SELECT列表中只取出需要的列,不可SELECT *,因为如果将所有字段一起做索引会导致索引文件过大,查询性能下降。

USING WHERE: 表示MYSQL 服务器在存储引擎收到记录后进行“后过滤”,如果查询未能使用索引, USING WHERE 的作用只是提醒我们MYSQL将用WHERE 子句来过滤结果集。

USING TEMPORARY: 表示MYSQL 需要使用临时表来存储结果集,常见于排序和分组查询。

USING FILESORT: MYSQL 中无法利用索引完成的排序操作称为“文件排序”

4. MYSQL 执行计划的局限:
4.1EXPLAIN不会告诉你关于触发器、存储过程的信息或用户自定义函数对查询的影响情况
4.2 EXPLAIN 不考虑各种CACHE
4.3 EXPLAIN 不能显示MYSQL在执行查询时所作的优化工作。
4.4 部份统计信息是估算的,并非精确值。
4.5EXPLAIN 只能解释SELECT 操作,其他操作要重写为SELECT后查看执行计划
推荐阅读
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • PHP设置MySQL字符集的方法及使用mysqli_set_charset函数
    本文介绍了PHP设置MySQL字符集的方法,详细介绍了使用mysqli_set_charset函数来规定与数据库服务器进行数据传送时要使用的字符集。通过示例代码演示了如何设置默认客户端字符集。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文介绍了在Hibernate配置lazy=false时无法加载数据的问题,通过采用OpenSessionInView模式和修改数据库服务器版本解决了该问题。详细描述了问题的出现和解决过程,包括运行环境和数据库的配置信息。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 本文介绍了如何找到并终止在8080端口上运行的进程的方法,通过使用终端命令lsof -i :8080可以获取在该端口上运行的所有进程的输出,并使用kill命令终止指定进程的运行。 ... [详细]
  • 禁止程序接收鼠标事件的工具_VNC Viewer for Mac(远程桌面工具)免费版
    VNCViewerforMac是一款运行在Mac平台上的远程桌面工具,vncviewermac版可以帮助您使用Mac的键盘和鼠标来控制远程计算机,操作简 ... [详细]
  • 本文详细介绍了云服务器API接口的概念和作用,以及如何使用API接口管理云上资源和开发应用程序。通过创建实例API、调整实例配置API、关闭实例API和退还实例API等功能,可以实现云服务器的创建、配置修改和销毁等操作。对于想要学习云服务器API接口的人来说,本文提供了详细的入门指南和使用方法。如果想进一步了解相关知识或阅读更多相关文章,请关注编程笔记行业资讯频道。 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 如何基于ggplot2构建相关系数矩阵热图以及一个友情故事
    本文介绍了如何在rstudio中安装ggplot2,并使用ggplot2构建相关系数矩阵热图。同时,通过一个友情故事,讲述了真爱难觅的故事背后的数据量化和皮尔逊相关系数的概念。故事中的小伙伴们在本科时参加各种考试,其中有些沉迷网络游戏,有些热爱体育,通过他们的故事,展示了不同兴趣和特长对学习和成绩的影响。 ... [详细]
author-avatar
手机用户2502896851
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有