当前位置: 首页 > article >正文

MySQL EXPLAIN 命令详解

文章目录

  • MySQL EXPLAIN 命令详解
    • EXPLAIN 输出的基本结构
      • id
      • 2. select_type
      • 3. table
      • 4. partitions
      • 5. type
      • 6. possible_keys
      • 7. key
      • 8. key_len
      • 9. ref
      • 10. rows
      • 11. filtered
      • 12. Extra
    • 使用 EXPLAIN 的注意事项
    • 示例

MySQL EXPLAIN 命令详解

EXPLAIN 是 MySQL 中一个非常有用的命令,用于分析 SQL 查询的执行计划,帮助开发者理解查询是如何被执行的,从而优化查询性能。

EXPLAIN 输出的基本结构

执行 EXPLAIN 后,MySQL 会返回一个表格,包含多列信息。以下是主要字段的详细解释:

id

  • 用途:查询的标识符,表示查询中 SELECT 子句或操作表的顺序。
  • :数字,从 1 开始递增。
  • 特殊情况:
    • 如果 id 相同,表示这些操作是同一查询的一部分,执行顺序从上到下。
    • 如果 id 不同,id 值越大,优先级越高,越先执行。

2. select_type

  • 用途:表示 SELECT 查询的类型。
  • 常见值:
    • SIMPLE:简单的 SELECT 查询,不包含子查询或 UNION。
    • PRIMARY:最外层的 SELECT 查询(在包含子查询或 UNION 时)。
    • SUBQUERY:子查询中的第一个 SELECT(不在 FROM 子句中)。
    • DERIVED:派生表(FROM 子句中的子查询)。
    • UNION:UNION 中的第二个或后续的 SELECT 查询。
    • UNION RESULT:UNION 的结果集。

3. table

  • 用途:表示当前查询涉及的表名或别名。
  • 特殊情况:
    • 对于派生表(DERIVED),会显示派生表的名称(通常是子查询的编号)。
    • 对于临时表,可能会显示 “temporary”。

4. partitions

  • 用途:表示查询访问的分区(如果表是分区表)。
  • :分区名列表,如果没有分区则为 NULL。

5. type

  • 用途:表示访问类型,是 EXPLAIN 中最重要的列之一,反映了查询的效率。
  • 常见值及效率从高到低排序:
    • system:表只有一行(系统表),这是 const 的特例。
    • const:通过索引一次就找到了,用于比较 PRIMARY KEY 或 UNIQUE 索引。因为只匹配一行数据,所以很快。
    • eq_ref:唯一性索引扫描,对于每个索引键,表中只有一条记录与之匹配。常见于主键或唯一索引的连接查询。
    • ref:非唯一性索引扫描,返回匹配某个单独值的所有行。本质上也是一种索引访问,它返回所有匹配某个单独值的行,然而,它可能会找到多个符合条件的行,所以他应该属于查找和扫描的混合体。
    • range:只检索给定范围的行,使用一个索引来选择行。key 列显示使用了哪个索引。一般就是在你的 where 语句中出现了 between、<、>、in 等的查询。
    • index:Full Index Scan,Index 与 All 区别为 index 类型只遍历索引树。这通常比 ALL 快,因为索引文件通常比数据文件小。(也就是说虽然 all 和 index 都是读全表,但 index 是从索引中读取的,而 all 是从硬盘中读的)
    • ALL:Full Table Scan,即全表扫描,意味着 MySQL 必须扫描整张表来找到需要的行。

6. possible_keys

  • 用途:表示查询可能使用的索引。
  • :索引名列表,如果没有可能的索引则为 NULL。
  • 注意:这只是 MySQL 认为可能使用的索引,实际执行时可能不会使用这些索引。

7. key

  • 用途:表示查询实际使用的索引。
  • :索引名,如果没有使用索引则为 NULL。
  • 注意:如果 key 为 NULL,表示没有使用任何索引。

8. key_len

  • 用途:表示使用的索引的长度(字节数)。
  • :数字,表示索引使用的字节数。
  • 注意:
    • 可以通过这个值估算出使用了多少列。
    • 对于字符串类型,key_len 的计算方式是:字符集的每个字符占用的字节数 × 字符串长度 + 可能的额外字节(如 NULL 终止符)。
    • 对于数字类型,key_len 是固定的。

9. ref

  • 用途:表示索引的哪一列被使用了,或者常量被用于比较。
  • 值:
    • 如果是 const,表示使用了常量值。
    • 如果是列名,表示使用了该列的值进行比较。
    • 如果是 NULL,表示没有使用引用。

10. rows

  • 用途:表示 MySQL 认为必须检查的行数。
  • :数字,表示估计需要检查的行数。
  • 注意:
    • 这是一个估计值,不是精确值。
    • 值越小,查询效率越高。

11. filtered

  • 用途:表示存储引擎返回的数据在 server 层过滤后,剩余的数据的百分比。
  • :百分比(0-100)。
  • 注意:
    • 这个值可以帮助你理解查询的过滤效率。
    • 值越高,表示过滤效果越好。

12. Extra

  • 用途:包含额外的信息,对查询优化非常有用。
  • 常见值及含义:
    • Using index:表示使用了覆盖索引(查询的列都在索引中,不需要回表)。
    • Using where:表示使用了 WHERE 条件过滤。
    • Using join buffer:表示使用了连接缓存(通常出现在没有使用索引的连接查询中)。
    • Using temporary:表示使用了临时表(通常出现在 GROUP BY 或 ORDER BY 中使用了非索引列时)。
    • Using filesort:表示使用了文件排序(通常出现在 ORDER BY 使用了非索引列时)。
    • Using index condition:表示使用了索引条件下推(ICP,MySQL 5.6+ 的特性)。
    • Using sort_union/Using union/Using intersect:表示使用了索引合并优化。

使用 EXPLAIN 的注意事项

  1. EXPLAIN 不会执行查询:它只是分析查询计划,不会实际执行查询。
  2. EXPLAIN 的结果依赖于当前数据:如果表的数据分布发生变化,EXPLAIN 的结果可能会不同。
  3. EXPLAIN 的结果依赖于 MySQL 版本:不同版本的 MySQL 可能有不同的执行计划和 EXPLAIN 输出。
  4. 结合其他工具使用:EXPLAIN 只是优化查询的一个工具,还需要结合慢查询日志、性能监控等其他工具进行综合分析。

示例

EXPLAIN SELECT * FROM users WHERE id = 1;

这个查询可能会返回类似如下的结果:

idselect_typetablepartitionstypepossible_keyskeykey_lenrefrowsfilteredExtra
1SIMPLEusersNULLconstPRIMARYPRIMARY4const1100.00Using index

从这个结果可以看出:

  • 查询使用了 PRIMARY 索引
  • 只需要检查 1 行数据
  • 使用了覆盖索引(Using index)

相关文章:

MySQL EXPLAIN 命令详解

文章目录 MySQL EXPLAIN 命令详解EXPLAIN 输出的基本结构id2. select_type3. table4. partitions5. type6. possible_keys7. key8. key_len9. ref10. rows11. filtered12. Extra 使用 EXPLAIN 的注意事项示例 MySQL EXPLAIN 命令详解 EXPLAIN 是 MySQL 中一个非常有用的命令&a…...

【Linux】文件赋权(指定文件所有者、所属组)、挂载光驱(图文教程)

文章目录 文件赋权创建文件 testChmod查看文件的当前权限使用 chmod 命令修改权限验证权限关键命令总结答案汇总 光驱挂载确认文件是否存在打包压缩压缩验证创建 work 目录将压缩文件复制到 work 目录新建挂载点 /MNT/CDROM 并挂载光驱答案汇总 更多相关内容可查看 此篇用以解决…...

第22讲、Odoo18 QWeb 模板引擎详解

Odoo QWeb 模板引擎详解与实战 Odoo 的 QWeb 是其自研的模板引擎&#xff0c;广泛应用于 HTML、XML、PDF 等内容的生成&#xff0c;支撑了前端页面渲染、报表输出、门户页面、邮件模板等多种场景。本文将系统介绍 QWeb 的核心用法、工作原理&#xff0c;并通过实战案例演示如何…...

OpenJudge | 大整数乘法

总时间限制: 1000ms 内存限制: 65536kB 描述 求两个不超过200位的非负整数的积。 输入 有两行&#xff0c;每行是一个不超过200位的非负整数&#xff0c;没有多余的前导0。 输出 一行&#xff0c;即相乘后的结果。结果里不能有多余的前导0&#xff0c;即如果结果是342&am…...

【原理解析】为什么显示器Fliker dB值越大,闪烁程度越轻?

显示器Fliker 1 显示器闪烁现象说明2 Fliker量测方法2.1 FMA法2.2 JEITA法问题答疑&#xff1a;为什么显示器Fliker dB值越大&#xff0c;闪烁程度越轻&#xff1f; 3 参考文献 1 显示器闪烁现象说明 当一个光源闪烁超过每秒10次以上就可在人眼中产生视觉残留&#xff0c;此时…...

Bootstrap Table开源的企业级数据表格集成

Bootstrap Table 是什么 ‌Bootstrap Table 是一个基于 Bootstrap 框架的开源插件&#xff0c;专为快速构建功能丰富、响应式的数据表格而设计。‌ 它支持排序、分页、搜索、导出等核心功能&#xff0c;并兼容多种 CSS 框架&#xff08;如 Semantic UI、Material Design 等&am…...

JDK8新特性之Steam流

这里写目录标题 一、Stream流概述1.1、传统写法1.2、Stream写法1.3、Stream流操作分类 二、Stream流获取方式2.1、根据Collection获取2.2、通过Stream的of方法 三、Stream常用方法介绍3.1、forEach3.2、count3.3、filter3.4、limit3.5、skip3.6、map3.7、sorted3.8、distinct3.…...

vue3表格使用Switch 开关

本示例基于vue3 element-plus 注&#xff1a;表格数据返回状态值为0、1。开关使用 v-model"scope.row.state 0" 会报错 故需要对写法做些修改&#xff0c;效果图如下 <el-table-column prop"state" label"入学状态" width"180" …...

【11408学习记录】考研写作双核引擎:感谢信+建议信复合结构高分模板(附16年真题精讲)

感谢信建议信 英语写作2016年考研英语&#xff08;二&#xff09;真题小作文题目分析写作思路第一段第二段锦囊妙句9&#xff1a;锦囊妙句12&#xff1a;锦囊妙句13&#xff1a;锦囊妙句18&#xff1a; 第三段 妙句成文 每日一句词汇第一步&#xff1a;找谓语第二步&#xff1a…...

一套个人知识储备库构建方案

写文章的初心是做知识沉淀。 好记性不如烂笔头&#xff0c;将阶段性的经验总结成文章&#xff0c;下次遇到相同的问题时&#xff0c;查起来比再次去搜集资料快得多。 然而&#xff0c;当文章越来越多时&#xff0c;有一个问题逐渐开始变得“严峻”起来。 比如&#xff0c;我…...

行李箱检测数据集VOC+YOLO格式2083张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;2083 标注数量(xml文件个数)&#xff1a;2083 标注数量(txt文件个数)&#xff1a;2083 …...

QT进阶之路:带命名空间的自定义控件在Qt设计器与qss中的使用技巧

文章目录 0.前言1.带命名空间Qt自定义类在QT设计器中的使用技巧1.1 定义一个带命令空间QLabel自定义类1.2 在QT设计器中引入自定义控件类 2.带命名空间Qt自定义类在qss中的使用技巧2.1 命名空间在 QSS 中的特殊语法2.1 在QSS中定义带命名空间的样式 3.在项目中使用带命名空间的…...

矩阵详解:从基础概念到实际应用

矩阵详解&#xff1a;从基础概念到实际应用 目录 矩阵的基本概念矩阵的类型矩阵运算特殊矩阵矩阵的逆与伴随矩阵的秩与等价分块矩阵矩阵的应用 矩阵知识体系思维导图 mindmaproot((矩阵))基本概念定义mn数表元素aij矩阵记号基本术语行数和列数方阵与非方阵矩阵相等矩阵类型…...

Prompt工程学习之自我一致性

自我一致性 &#xff08;Self-consistency&#xff09; 概念&#xff1a;该技术通过对同一问题采样不同的推理路径&#xff0c;并通过多数投票选择最一致的答案&#xff0c;来解决大语言模型&#xff08;LLM&#xff09;输出的可变性问题。通过使用不同的温度&#xff08;temp…...

实践提炼,EtherNet/IP转PROFINET网关实现乳企数字化工厂增效

乳企数字化工厂的核心技术应用 1. 智能质检&#xff1a;机器视觉协议网关的协同 液态奶包装线&#xff08;利乐罐装&#xff09;的漏码检测生产线&#xff0c;其高速产线&#xff08;20,000包/小时&#xff09;需实时识别微小缺陷&#xff0c;但视觉系统&#xff08;康耐视Ca…...

从以物换物到DeFi:交易的演变与Arbitrum的DeFi生态

交易的本质&#xff1a;从以物换物到现代金融 交易是人类社会经济活动的核心&#xff0c;是通过交换资源&#xff08;如货物、服务或货币&#xff09;满足各方需求的行为。其本质是价值交换&#xff0c;旨在实现资源的优化配置。交易的历史可以追溯到人类文明的起源&#xff0…...

一文掌握 Tombola 抽象基类的自动化子类测试策略

深入解析 Python 抽象基类的自动化测试框架设计 在 Python 开发中&#xff0c;抽象基类&#xff08;ABC&#xff09;是定义接口规范的强大工具。本文将以 Tombola 抽象基类为例&#xff0c;详细解析其子类的自动化测试框架设计&#xff0c;展示如何通过 Python 的内省机制实现…...

vue.js not detected解决方法

如果你在开发环境中遇到“Vue.js not detected”的错误&#xff0c;这通常意味着你的项目没有正确设置或者配置以识别Vue.js。下面是一些解决这个问题的步骤&#xff1a; 1. 确认Vue.js已正确安装 首先&#xff0c;确保你的项目中已经正确安装了Vue.js。你可以通过以下命令来…...

Redis 知识点一

参考 Redis - 常见缓存问题 - 知乎 Redis的缓存更新策略 - Sherlock先生 - 博客园 三种缓存策略&#xff1a;Cache Aside 策略、Read/Write Through 策略、Write Back 策略-CSDN博客 1.缓存问题 1.1.缓存穿透 大量请求未命中缓存&#xff0c;直接访问数据库。 解决办法&…...

分类场景数据集大全「包含数据标注+训练脚本」 (持续原地更新)

一、作者介绍&#xff1a;六年算法开发经验、AI 算法经理、阿里云专家博主。擅长&#xff1a;检测、分割、理解、大模型 等算法训练与推理部署任务。 二、数据集介绍&#xff1a; 质量高&#xff1a;高质量图片、高质量标注数据&#xff0c;吐血标注、整理&#xff0c;可以作为…...

数据结构与算法——二叉树高频题目(1)

前言&#xff1a; 简单记录一下自己学习算法的历程&#xff0c;主要根据左老师自己的视频课进行&#xff0c;由于大部分课程涉及题目较多&#xff0c;所以分文章进行记录。 本文将简单记录一下二叉树的层序遍历和 Z 形层次遍历。 参考视频&#xff1a; 算法讲解036【必备】…...

Web后端开发(SpringBootWeb、HTTP、Tomcat快速入门)

目录 SpringBootWeb入门 Spring 需求&#xff1a; 步骤&#xff1a; HTTP协议&#xff1a; 概述&#xff1a; 请求协议&#xff1a; 响应协议&#xff1a; 协议解析&#xff1a; Web服务器-Tomcat&#xff1a; 简介&#xff1a; 基本使用&#xff1a; SpringBootWeb…...

CppCon 2015 学习:Memory and C++ debugging at Electronic Arts

这是关于 C 游戏开发中内存接口与调试工具演进 的介绍&#xff0c;主要回顾了从早期到现在平台上的内存与调试策略变化&#xff1a; 游戏平台演进与内存接口编程风格 2000年 (PlayStation 2) 编程风格偏向嵌入式 C 风格。系统资源有限&#xff08;例如 32MB RAM&#xff09;…...

android binder(四)binder驱动详解2

二、情景分析 1、ServiceManager 启动过程 2. 服务注册 服务注册过程(addService)核心功能&#xff1a;在服务所在进程创建binder_node&#xff0c;在servicemanager进程创建binder_ref。其中binder_ref的desc在同一个进程内是唯一的&#xff1a; 每个进程binder_proc所记录的…...

4G无线网络转串口模块 DTU-1101

4G无线网络转串口模块概述 4G无线网络转串口模块是一种工业通信设备&#xff0c;通过4G网络将串口&#xff08;如RS232/RS485&#xff09;设备接入互联网&#xff0c;实现远程数据传输与控制。适用于物联网&#xff08;IoT&#xff09;、工业自动化、远程监控等场景。 核心功能…...

机器学习方法实现数独矩阵识别器

目录 导包 工具函数构建说明 1. 基础图像处理工具 2. 图像预处理模块 3. 数独轮廓检测与定位 4. 网格划分与单元格提取 5. 数字特征提取 6. 多网格处理流程 数据流分析 核心算法详解 核心机器视觉方法 1. 透视变换校正算法 2. 数字区域提取算法 3. 多网格检测算法…...

OpenEuler服务器警告邮件自动化发送:原理、配置与安全实践

OpenEuler服务器警告邮件自动化发送&#xff1a;原理、配置与安全实践 在服务器的运维管理过程中&#xff0c;及时感知系统异常状态至关重要。当OpenEuler系统运行时&#xff0c;将服务器的警告信息实时推送至邮箱&#xff0c;能帮助运维人员快速响应潜在问题&#xff0c;保障…...

随机访问介质访问控制:网络中的“自由竞争”艺术

想象一场自由辩论赛——任何人随时可以发言&#xff0c;但可能多人同时开口导致混乱。这正是计算机网络中随机访问协议的核心挑战&#xff1a;如何让多个设备在共享信道中高效竞争&#xff1f;本文将深入解析五大随机访问技术及其智慧。 一、核心思想&#xff1a;自由竞争 冲突…...

【Redis】笔记|第9节|Redis Stack扩展功能

Redis Stack 扩展功能笔记&#xff08;基于 Redis 7&#xff09; 一、Redis Stack 概述 定位&#xff1a;Redis OSS 扩展模块&#xff08;JSON、搜索、布隆过滤器等&#xff09;&#xff0c;提供高级数据处理能力。核心模块&#xff1a; RedisJSON&#xff1a;原生 JSON 支持…...

【Vmwrae】快速安装windows虚拟机

前言 虚拟机是我们在使用电脑进行开发或者平常工作时经常使用到的工具 它可以自定义各种硬件&#xff0c;运行各种不同的系统&#xff0c;且无论发生什么都不会影响到实体机。 教程主要讲了如何在零基础的情况下快速安装一台虚拟机。 下载安装 VMware Workstation Pro17 …...