mysql查看执行计划EXPLAIN

2023-11-04

一、EXPLAIN语法

语法:EXPLAIN SELECT

1、EXPLAIN EXTENDED SELECT 将执行计划“反编译”成SELECT语句,运行SHOW WARNINGS 可得到被MySQL优化器优化后的查询语句
2、EXPLAIN PARTITIONS SELECT 用于分区表的EXPLAIN
3、在Navicat图形化界面中,点击“解释”出现执行计划的信息

二、执行计划中的信息

1、id:包含一组数字,表示查询中执行select子句或操作表的顺序。id相同,可以认为是一组,从上往下顺序执行;在所有组中,id值越大,优先级越高,越先执行。
2、select_type:主要用于区别普通查询, 联合查询, 子查询等复杂查询。
    SIMPLE:查询中不包含子查询或者UNION
    查询中若包含任何复杂的子部分,最外层查询则被标记为:PRIMARY
    在SELECT或WHERE列表中包含了子查询,该子查询被标记为:SUBQUERY
    在FROM列表中包含的子查询被标记为:DERIVED(衍生)
    若第二个SELECT出现在UNION之后,则被标记为UNION;若UNION包含在FROM子句的子查询中,外层SELECT将被标记为:DERIVED
    从UNION表获取结果的SELECT被标记为:UNION RESULT
3、type:表示MySQL在表中找到所需行的方式,又称“访问类型”(ALL、index、range、ref、eq_ref、const、system、NULL),由左至右,由最差到最好
    ALL:Full Table Scan, MySQL将遍历全表以找到匹配的行
    index:Full Index Scan,index与ALL区别为index类型只遍历索引树
    range:索引范围扫描,对索引的扫描开始于某一点,返回匹配值域的行,常见于between、<、>等的查询
    ref:非唯一性索引扫描,返回匹配某个单独值的所有行。常见于使用非唯一索引即唯一索引的非唯一前缀进行的查找
    eq_ref:唯一性索引扫描,对于每个索引键,表中只有一条记录与之匹配。常见于主键或唯一索引扫描
    const、system:当MySQL对查询某部分进行优化,并转换为一个常量时,使用这些类型访问。如将主键置于where列表中,MySQL就能将该查询转换为一个常量
    system是const类型的特例,当查询的表只有一行的情况下, 使用system
    NULL:MySQL在优化过程中分解语句,执行时甚至不用访问表或索引
4、possible_keys:指出MySQL能使用哪个索引在表中找到行,查询涉及到的字段上若存在索引,则该索引将被列出,但不一定被查询使用
5、key:显示MySQL在查询中实际使用的索引,若没有使用索引,显示为NULL
    查询中若使用了覆盖索引,则该索引仅出现在key列表中
6、key_len:表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度
    key_len显示的值为索引字段的最大可能长度,并非实际使用长度,即key_len是根据表定义计算而得,不是通过表内检索出的
7、ref:表示上述表的连接匹配条件,即哪些列或常量被用于查找索引列上的值
8、rows:表示MySQL根据表统计信息及索引选用情况,估算的找到所需的记录所需要读取的行数
9、Extra:包含不适合在其他列中显示但十分重要的额外信息
    Using index:该值表示相应的select操作中使用了覆盖索引(Covering Index)。
    MySQL可以利用索引返回select列表中的字段,而不必根据索引再次读取数据文件
    包含所有满足查询需要的数据的索引称为 覆盖索引(Covering Index)
    注意:如果要使用覆盖索引,一定要注意select列表中只取出需要的列,不可select *,因为如果将所有字段一起做索引会导致索引文件过大,查询性能下降
    Using where:表示MySQL服务器在存储引擎受到记录后进行“后过滤”(Post-filter),
    如果查询未能使用索引,Using where的作用只是提醒我们MySQL将用where子句来过滤结果集
    Using temporary:表示MySQL需要使用临时表来存储结果集,常见于排序和分组查询
    Using filesort:MySQL中无法利用索引完成的排序操作称为“文件排序”
三、执行计划的局限
EXPLAIN不会告诉你关于触发器、存储过程的信息或用户自定义函数对查询的影响情况
EXPLAIN不考虑各种Cache
EXPLAIN不能显示MySQL在执行查询时所作的优化工作
部分统计信息是估算的,并非精确值
EXPALIN只能解释SELECT操作,其他操作要重写为SELECT后查看执行计划

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mysql查看执行计划EXPLAIN 的相关文章

  • Preg_replace() 删除除查询结尾之外的所有内容

    首先 为我糟糕的英语感到抱歉 我有这样的疑问 SELECT t1 SELECT COUNT FROM table a t2 WHERE t1 id t2 id c AND t2 status 1 AS aula FROM table c t
  • MySQL 按主键排序

    某些 SQL 服务器允许使用通用语句 例如ORDER BY PRIMARY KEY 我不相信这适用于 MySQL 是否有任何此类解决方法可以允许跨多个表自动选择 或者是否需要查找查询来确定主键 我一直在研究的解决方法包括调用SHOW COL
  • mysql语句中的*星号是什么意思?

    Ex mysql query SELECT FROM members WHERE id id 这意味着选择表中的所有列
  • C#:SQL 查询生成器类

    在哪里可以找到好的 SQL 查询构建器类 我只需要一个简单的类来构建 SQL 字符串 仅此而已 我需要它用于 C 和 MySql 我真的不需要像 Linq 或 NHibernate 这样的东西 谢谢 由于 Google 将我引导至此页面 我
  • MySQL 全文搜索不适用于某些单词,例如“house”

    我已经在 3 个字段中的一小部分记录上设置了全文索引 也尝试了 3 个字段的组合 并得到了相同的结果 有些单词返回结果很好 但某些单词如 house 和 澳大利亚 不这样做 有趣的是 澳大利亚 和 家乡 这样做 这似乎是奇怪的行为 如果我添
  • PHP 选择后立即删除

    我有一个 PHP 服务器脚本 它从 MySQL 数据库中选择一些数据 一旦我将 mysql query 和 mysql fetch assoc 的结果存储在我自己的局部变量中 我就想删除我刚刚选择的行 这种方法的问题在于 PHP 似乎对我的
  • 社交应用程序的数据库设计和优化注意事项

    通常的情况 我有一个简单的应用程序 允许人们上传照片并关注其他人 因此 每个用户都会有类似 墙 或 活动源 的东西 他或她可以在其中看到他 她的朋友 他或她关注的人 上传的最新照片 大多数功能都很容易实现 然而 当涉及到这个历史活动源时 由
  • 为什么 MySQL 创建带有 _seq 后缀的表?

    我创建了一个 InnoDB 表 名为foo在 MySQL 中 一旦我对表执行插入操作 我就会看到另一个表foo seq被建造 如果我删除自动生成的表 它会在下一次插入后出现 是什么原因造成的 听起来像是正在创建一个序列 您是否有自动生成的主
  • 查询中列的顺序重要吗?

    当从 MySQL 表中选择列时 与表中的顺序相比 选择列的顺序是否会影响性能 不考虑可能覆盖列的索引 例如 您有一个包含行 uid name bday 的表 并且有以下查询 SELECT uid name bday FROM table M
  • MySQL 使用 ALTER IGNORE TABLE 出现重复错误

    我的 MySQL 中有一个有重复项的表 我尝试删除重复项并保留一项 我没有主键 我可以通过以下方式找到重复项 select user id server id count as NumDuplicates from user server
  • 如何正确转义mysql?

    我刚刚发现如果我写 select from tbl where name like foo 然后添加 foo 作为参数及其值 a 用户数据 它不会正确转义 我勒个去 它想要 a 即使我使用参数 我还是忍不住觉得我对 sql 注入持开放态度
  • Apache、PHP 和 MySQL 可移植吗?

    我可以在外部硬盘上运行 Apache PHP 和 MySQL 吗 我需要这个 因为我在不同的地方工作 计算机 有时我没有安装和配置所有使用的应用程序 当然可以 XAMPP http www apachefriends org en xamp
  • MySQL MIN/MAX 所有行

    我有桌子Races与行ID Name and TotalCP 我选择分钟 TotalCP FROM Races 但是我想选择具有最小值的整行 我如何在单个查询中做到这一点 从聚合值获取整行的一般形式是 SELECT FROM Races W
  • Laravel leftJoin 仅右表的最后一条记录

    我是 Laravel 的新手 我有两张桌子 1 产品 2 价格 products id product int p key name varchar prices id price int p key id product int
  • 即使使用“autoReconnect=true”,MySql JDBC 也会超时[重复]

    这个问题在这里已经有答案了 有时 我的 Java Tomcat6 Debian Squeeze 应用程序无法与 MySql 服务器通信 Tomcat 应用程序位于前端服务器上 而 MySql 位于单独的 仅限 MySql 的机器上 一个典型
  • 如何在 Play java 中创建数据库线程池并使用该池进行数据库查询

    我目前正在使用 play java 并使用默认线程池进行数据库查询 但了解使用数据库线程池进行数据库查询可以使我的系统更加高效 目前我的代码是 import play libs Akka import scala concurrent Ex
  • Java JDBC:更改表

    我希望对此表进行以下修改 添加 状态列 varchar 20 日期列 时间戳 我不确定该怎么做 String createTable Create table aircraft aircraftNumber int airLineCompa
  • 我可以使用 HSQLDB 进行 junit 测试克隆 mySQL 数据库吗

    我正在开发一个 spring webflow 项目 我想我可以使用 HSQLDB 而不是 mysql 进行 junit 测试吗 如何将我的 mysql 数据库克隆到 HSQLDB 如果您使用 spring 3 1 或更高版本 您可以使用 s
  • 一次从多个表中删除行

    我正在尝试将 2 个查询合并为一个这样的查询 result db gt query DELETE FROM menu WHERE name new or die db gt error result db gt query DELETE F
  • 映射 mysql 中同一个表的多个值

    您好 我必须使用另一个表中的值 id 获取文本值 表 1 包含值 ID 表 2 包含名称和值 ID 表 1 SEVERITY OCCURENCE DETECTABILITY 2 3 4 表 2 id name value 1 Very Hi

随机推荐

  • 如何打印2019年每个月的第一个星期天的日期

    这是一个关于日期处理的题目 在这里我主要用了Calendar类的相关属性与方法 首先 我们来分析一下 我们可以从2019年1月1日 用while循环依次遍历 到2019年12月7日结束 每次加一天 利用if判断 满足在第一周且是周日的条件
  • 电脑重装系统后无法连接网络怎么处理

    最近小编的台式电脑重装系统后无法连接网络 发现很多朋友也有同样的情况 那么遇到这种情况我们要如何处理呢 下面小编就来为大家讲解一下台式电脑重装系统后无法连接网络处理方法 方法 步骤 方法一 检查本地连接问题 1 鼠标右键点击系统桌面上的 网
  • DocArray 0.20.0 发布!新增 Milvus 后端支持,更好地嵌套数据搜索,新增 RGB-D 格式的 3D 模型表示

    DocArray 是一个用于处理 传输和存储多模态数据的 Python 工具包 DocArray 提供便捷的多模态数据处理功能 具备基于 Protobuf 提供高性能的网络传输性能 同时也为多种向量存储方案提供统一的 API 接口 GitH
  • CTFShow-Web入门

    目录 爆破 web21 web22 web23 web24 web25 web26 web27 web28 爆破 web21 解题思路 考察burp的intruder模块 访问发现是前端验证 随便输入账号密码抓包发现是Basic认证 Bas
  • 【splishsplash】splishsplash入门使用

    本文的目地为总结splishsplash的入门使用方法 splishsplash是一个C 开源流体引擎 主要用于产生流体动画 它的核心算法是SPH法 资源汇总 github https github com InteractiveCompu
  • 数据挖掘之关联规则挖掘的一些定义

    一 算法定义 关联规则挖掘用于发现隐藏在大型数据集中的令人感兴趣的联系 所发现的模式通常用关联规则或频繁项集的形式表示 关联规则反映了一个事物与其他事物之间的相互依存性和关联性 如果两个或多个事物之间存在一定的关联关系 那么 其中一个事物发
  • c++ STL map简介

    首先头文件 include
  • 深入JS内存模型

    前言 什么是JS的内存模型 看过了很多资料 都是千篇一律的栈内存 堆内存 基本数据类型存储在栈内存 引用数据类型存储在堆内存等等之类的 看过这些之后 对于我们去理解整个JS内存之中复杂的关系 本文会从JavaScript语法之中的各个语言特
  • DHCP攻击与防范实践

    1 DHCP工作原理 DHCP客户端从服务端申请到IP地址等网络配置信息需要经过四个步骤 每个步骤需要发送相应类型的数据报文 如下图所示 首先由客户端以广播方式发出 DHCP Discover 报文来寻找网络中的DHCP服务端 当服务端接收
  • go localhost 的简单使用

    首先在文件夹增加文件web go package main import net http func main http Handle http FileServer http Dir http ListenAndServe 8080 ni
  • DirectShow资源共享

    前段时间为了公司内部培训 写了两个DirectShow的PPT 共享如下 https skydrive live com cid 0E1C9F572B6A2D19 id E1C9F572B6A2D19 211790 另外 我的几本书的源代码
  • VS2022 LNK1104无法打开文件“libboost_filesystem-vc143-mt-gd-x64-1_78.lib”

    VS发布了最新版2022 刚好最近我要用到VS我就下载了最新版 配置了一个PCL环境 尝试运行一段代码 结果报错 找了半天问题才找到 记录一下 错误 LNK1104 无法打开文件 libboost filesystem vc143 mt g
  • qt5开发及实例_Qt 5.14版本正式发布(带下载链接)

    摘录并翻译自Qt官网内容 快来看看新版本更新了些什么东西吧 我们今天 2019 12 12 发布了Qt 5 14 该版本以及明年的Qt 5 15 LTS开始为通向Qt 6铺平道路 尽管我们正在努力通过标记不推荐使用的功能使将来尽可能平稳地移
  • git bash 不支持中文处理

    1 打开git bash后 对窗口右键 gt Options gt Text gt Locale改为zh CN Character set改为UTF 8 关闭git bash 再打开 可以显示中文了 2 如果前一种方法不行 则在git ba
  • 解决org.springframework.amqp.AmqpException: No method found for class [B

    spring boot在集成rabbitmq时 如果使用 amqp client 发送消息 RabbitListener会一直循环报错 org springframework amqp rabbit listener exception L
  • 为何学linux及用处

    目前企业使用的操作系统无非就是国产类的 windows和linux类 我们要提升自己的技能 需要学习这两款 我记得在大学时期 学习过windows以及linux 但当时觉得又不常用 就学的模棱两可 毕业之后 你会发现 其实这两种操作系统是很
  • nginx热部署的原理:nginx -s reload

    我们执行这条命令的原因是希望 nginx 不停止服务始终在处理新的请求的同时把 nginx 的配置文件平滑的把旧的 nginx conf 配置更新为新的 nginx conf 配置 这样一个功能对于 nginx 非常有必要 但是有时候我们会
  • 几本适合嵌入式软件工程师阅读的电子入门书

    导读 周末了 下面这些书 是我作为一个 计算机科学与技术出身的嵌入式软件工程师 出于自身的兴趣爱好且为了更好和硬件工程师们协作 从自身的角度出发而搜集到的信息 仅供参考 不构成专业建议 同时 也希望有经验的嵌入式 硬件工程师 能给我和其他对
  • mysql的replace字符串的替换

    PLACE str from str to str 例 REPLACE 4 568 23 把逗号改为空结果为 4568 23
  • mysql查看执行计划EXPLAIN

    一 EXPLAIN语法 语法 EXPLAIN SELECT 1 EXPLAIN EXTENDED SELECT 将执行计划 反编译 成SELECT语句 运行SHOW WARNINGS 可得到被MySQL优化器优化后的查询语句 2 EXPLA