【MySql】EXPLAIN执行计划全解析:15个字段深度解读与调优指南
文章目录
- 一、执行计划核心字段总览
- 二、关键字段深度拆解
- 1. type(访问类型)——查询性能的晴雨表
- 典型场景分析:
- 2. key_len(索引使用长度)——索引利用率的检测仪
- 计算示例:
- 3. Extra(附加信息)——隐藏的性能杀手
- 常见值解析:
- 三、全字段详解速查表
- 四、性能诊断四步法
- 第一步:检查type等级
- 第二步:验证索引使用
- 第三步:分析扫描行数
- 第四步:排查Extra警告
- 五、经典优化案例
- 案例1:索引失效分析
- 案例2:覆盖索引优化
- 六、高级分析技巧
- 1. JSON格式查看详细成本
- 2. 索引长度验证公式
- 3. 执行计划可视化工具推荐
- 七、常见问题解决方案
一、执行计划核心字段总览

| 字段名 | 人类语言解释 | 性能影响等级 |
|---|---|---|
| type | 数据访问方式 | ★★★★★ |
| key | 实际使用索引 | ★★★★☆ |
| rows | 预估扫描行数 | ★★★★☆ |
| Extra | 附加执行信息 | ★★★★☆ |
| key_len | 使用索引的长度 | ★★★☆☆ |
二、关键字段深度拆解
1. type(访问类型)——查询性能的晴雨表
性能从优到劣排序:
system > const > eq_ref > ref > fulltext > range > index > ALL
典型场景分析:
-- 最优情况:主键查询
EXPLAIN SELECT * FROM users WHERE id = 1;
-- type: const-- 最差情况:全表扫描
EXPLAIN SELECT * FROM orders WHERE amount > 100;
-- type: ALL
2. key_len(索引使用长度)——索引利用率的检测仪
计算公式:
索引字段长度 × 字段数 + 预留字节
计算示例:
CREATE TABLE `demo` (`id` INT(11) NOT NULL,`name` VARCHAR(20) DEFAULT NULL,`age` TINYINT(4) DEFAULT NULL,INDEX `idx_name_age` (`name`,`age`)
);-- 查询1:使用完整索引
EXPLAIN SELECT * FROM demo WHERE name='张三' AND age=25;
-- key_len = 20*3+1 + 1 = 62-- 查询2:仅使用name列
EXPLAIN SELECT * FROM demo WHERE name='李四';
-- key_len = 20*3+1 = 61
3. Extra(附加信息)——隐藏的性能杀手
常见值解析:
| 值 | 含义 | 处理建议 |
|---|---|---|
| Using index | 使用覆盖索引 | 保持当前优化 |
| Using temporary | 使用临时表 | 检查GROUP BY/ORDER BY字段 |
| Using filesort | 文件排序 | 添加合适索引 |
| Using where | 存储引擎返回后过滤 | 检查索引是否完整 |
| Select tables optimized away | 优化器已优化(如MIN/MAX查询) | 无需处理 |
三、全字段详解速查表
| 字段名 | 含义 | 常见值示例 |
|---|---|---|
| id | 查询序列号 | 1, 2(联合查询时数值不同) |
| select_type | 查询类型 | SIMPLE, PRIMARY, SUBQUERY |
| table | 访问的表名 | users, orders |
| partitions | 匹配的分区 | p0, p1 |
| type | 访问方式 | const, ref, ALL |
| possible_keys | 可能使用的索引 | idx_name, PRIMARY |
| key | 实际使用的索引 | idx_age |
| key_len | 使用索引的长度 | 4, 62 |
| ref | 索引引用关系 | const, db1.users.id |
| rows | 预估扫描行数 | 1, 10024 |
| filtered | 存储引擎返回数据后,经过过滤剩余的比例 | 100.00 |
| Extra | 附加执行信息 | Using index, Using temporary |
四、性能诊断四步法
第一步:检查type等级
- ✅ 目标:至少达到range级别
- ❌ 问题:出现ALL时需要紧急优化
- 💡 处理:添加合适索引
第二步:验证索引使用
-- 检查实际使用索引是否最优
SHOW INDEX FROM users;
第三步:分析扫描行数
- 当rows > 10000时:可能存在全表扫描
- 优化案例:100万行表查询从2s优化到0.02s
第四步:排查Extra警告
1. 发现Using filesort → 检查ORDER BY字段是否匹配索引
2. 出现Using temporary → 优化GROUP BY字段
3. 存在Using where → 检查查询条件是否完整使用索引
五、经典优化案例
案例1:索引失效分析
-- 原始查询(type: ALL)
EXPLAIN SELECT * FROM orders WHERE YEAR(create_time)=2023;-- 优化方案:改为范围查询
EXPLAIN SELECT * FROM orders
WHERE create_time BETWEEN '2023-01-01' AND '2023-12-31';
-- type提升为range
案例2:覆盖索引优化
-- 原始查询(Extra: NULL)
EXPLAIN SELECT user_id FROM comments WHERE post_id=100;-- 创建覆盖索引
ALTER TABLE comments ADD INDEX idx_post_user(post_id,user_id);
-- Extra显示Using index
六、高级分析技巧
1. JSON格式查看详细成本
EXPLAIN FORMAT=JSON
SELECT * FROM products WHERE price > 100;
-- 查看"cost_info"字段
2. 索引长度验证公式
VARCHAR(n):n*3+2
INT:4
TINYINT:1
DATETIME:5
允许NULL的字段:+1
3. 执行计划可视化工具推荐
- MySQL Workbench执行计划可视化
- Percona Toolkit的pt-visual-explain
- JetBrains DataGrip的图形化展示
七、常见问题解决方案
| 症状 | 原因 | 解决方案 |
|---|---|---|
| type=ALL | 无可用索引 | 添加WHERE条件涉及的索引 |
| Using filesort | 排序字段不匹配索引 | 创建复合索引包含排序字段 |
| key_len过短 | 未充分使用复合索引 | 检查查询条件顺序 |
| rows数值异常 | 统计信息过期 | 执行ANALYZE TABLE |
| filtered=100 | 存储引擎层未过滤数据 | 检查索引覆盖情况 |
相关文章:
【MySql】EXPLAIN执行计划全解析:15个字段深度解读与调优指南
文章目录 一、执行计划核心字段总览二、关键字段深度拆解1. type(访问类型)——查询性能的晴雨表典型场景分析: 2. key_len(索引使用长度)——索引利用率的检测仪计算示例: 3. Extra(附加信息&a…...
论文笔记(七十二)Reward Centering(五)
Reward Centering(五) 文章概括摘要附录B 理论细节C 实验细节D 相关方法的联系 文章概括 引用: article{naik2024reward,title{Reward Centering},author{Naik, Abhishek and Wan, Yi and Tomar, Manan and Sutton, Richard S},journal{arX…...
Linux内核自定义协议族开发指南:理解net_device_ops、proto_ops与net_proto_family
在Linux内核中开发自定义协议族需要深入理解网络协议栈的分层模型。net_device_ops、proto_ops和net_proto_family是三个关键结构体,分别作用于不同的层次。本文将详细解析它们的作用、交互关系及实现方法,并提供一个完整的开发框架。 一、核心结构体的作用与层级关系 struct…...
SOME/IP-SD -- 协议英文原文讲解6
前言 SOME/IP协议越来越多的用于汽车电子行业中,关于协议详细完全的中文资料却没有,所以我将结合工作经验并对照英文原版协议做一系列的文章。基本分三大块: 1. SOME/IP协议讲解 2. SOME/IP-SD协议讲解 3. python/C举例调试讲解 5.1.3.1 E…...
【数据处理】COCO 数据集掩码 Run-Length Encoding (RLE) 编码转二进制掩码
输入:结果.json 输出:mask.jpg json内容示例如下: {"labels":[ # class_id 1,2,3,...],"scores":[ # 置信度0.2,0.7,0.3,...],"bboxes":[[1244.0,161.0,1335.0,178.0],[1243.0,161.0,1336.0,178.0],[1242.0,1…...
Java中的缓存技术:Guava Cache vs Caffeine vs Redis
在Java中,缓存技术是提升应用性能的重要手段。常见的缓存技术包括Guava Cache、Caffeine和Redis。它们各有优缺点,适用于不同的场景。以下是对它们的详细对比: 1. Guava Cache 类型: 本地缓存 特点: 基于内存的缓存,适用于单机应…...
Day8 蓝桥杯acw讲解
首先先给大家看一道这个题, 我真的是太喜欢y总了,如果大家也是最近在准备蓝桥杯或者计算机相关的比赛,但是得加一个前提就是必须最好基础真的很好,要不然其实买了课,也没啥太大的用处,其实就可以以我本人举…...
《Operating System Concepts》阅读笔记:p147-p158
《Operating System Concepts》学习第 15 天,p147-p158 总结,总计 12 页。 一、技术总结 1.socket (1)定义 A socket is defined as an endpoint for communication(socket 是用于通信的端点,或者说socket 是通信端点的抽象表示。). A s…...
JSON Schema 入门指南:如何定义和验证 JSON 数据结构
文章目录 一、引言二、什么是 JSON Schema?三、JSON Schema 的基本结构3.1 基本关键字3.2 对象属性3.3 数组元素3.4 字符串约束3.5 数值约束 四、示例:定义一个简单的 JSON Schema五、使用 JSON Schema 进行验证六、实战效果6.1 如何使用 七、总结 一、引…...
java后端开发day20--面向对象进阶(一)--static继承
(以下内容全部来自上述课程) 1.static–静态–共享 static表示静态,是java中的一个修饰符,可以修饰成员方法,成员变量。 1.静态变量 被static修饰的成员变量,叫做静态变量。 特点: 被该类…...
FastJSON 默认行为:JSON.toJSONString 忽略 null 字段
完整的 FakeRegistrationController 代码,这让我可以全面分析后端逻辑,特别是为什么空的字段(如 compareDate)不返回给前端。我将详细分析代码的每个接口,尤其是与 list 请求和字段返回相关的部分,并解释原…...
数据结构:基数排序(c++实现)
个人主页 : 个人主页 个人专栏 : 《数据结构》 《C语言》《C》《Linux》《网络》 《redis学习笔记》 文章目录 基数排序的定义和基本原理基本原理具体步骤 基数排序的优缺点:代码实现总结 基数排序的定义和基本原理 基数排序(Radix Sort)是一…...
DOM 事件 HTML 标签属性速查手册
以下是一份 DOM 事件 & HTML 标签属性速查手册,涵盖常用场景和示例,助你快速查阅和使用: 一、DOM 事件速查表 1. 鼠标事件 事件名触发时机适用元素示例代码click元素被点击任意可见元素button.addEventListener(click, () > { ... …...
PhotoShop学习01
了解Photoshop 这里省略了Photoshop的软件安装,请自行查找资源下载。 1.打开图片 下图为启动photoshop后出现的界面,我们可以通过创建新文件或打开已有文件来启用photoshop的工作界面。 可以通过左边的按钮进行新文件的创建或打开已有文件。 也可以点…...
mongodb【实用教程】
MongoDB 是一个开源的文档型数据库管理系统 下载安装 Windows 系统 https://blog.csdn.net/weixin_41192489/article/details/126777309 GUI工具 【推荐】MongoDB Compass https://www.mongodb.com/zh-cn/docs/compass/current/ Robo 3T https://blog.csdn.net/weixin_4119248…...
C语言机试编程题
编写版本:vc2022 1.求最大/小值 #include<stdio.h> int main(){int a[50],n;int max, min;printf("请输入您要输入几个数");scanf_s("%d", &n);printf("请输入您要比较的%d个数\n",n);for (int i 0; i<n; i) {scanf_…...
threeJs+vue 轻松切换几何体贴图
嗨,我是小路。今天主要和大家分享的主题是“threeJsvue 轻松切换几何体贴图”。 想象一下,手头上正好有个在线3D家具商店,用户不仅可以看到产品的静态图片,还能实时更换沙发的颜色或材质,获得真实的购物体验。…...
Android ObjectBox数据库使用与集成指南
ObjectBox其核心特点ObjectBox与 SQLite 和 Realm 的对比Android集成ObjectBox创建ObjectBox实体对象创建ObjectBox操作管理类OBManager在Application初始化ObjectBox插入或更新数据查询数据统计数据分页数据查询删除数据总结今天分享一套Android另一个数据库ObjectBox。Object…...
【HarmonyOS Next】地图使用详解(一)
背景 这系列文章主要讲解鸿蒙地图的使用,当前可以免费使用,并提供了丰富的SDK给开发者去自定义控件开发。目前可以实现个性化显示地图、位置搜索和路径规划等功能,轻松完成地图构建工作。需要注意的是,现在测试只能使用实体手机去…...
seacmsv9注入管理员账号密码+orderby+limi
1:mysql默认存储引擎innoDB携带的表 1,mysql.innodb_table_stats 2,mysql.innodb_index_stats SELECT table_name FROM mysql.innodb_table_stats WHERE database_name DATABASE(); 2: 关键字做处理 HEX编码:0x696E666F726D6174696F6E5F7…...
大数据学习栈记——Neo4j的安装与使用
本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...
2024年赣州旅游投资集团社会招聘笔试真
2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...
JVM垃圾回收机制全解析
Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...
c++ 面试题(1)-----深度优先搜索(DFS)实现
操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...
【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...
Vue ③-生命周期 || 脚手架
生命周期 思考:什么时候可以发送初始化渲染请求?(越早越好) 什么时候可以开始操作dom?(至少dom得渲染出来) Vue生命周期: 一个Vue实例从 创建 到 销毁 的整个过程。 生命周期四个…...
小木的算法日记-多叉树的递归/层序遍历
🌲 从二叉树到森林:一文彻底搞懂多叉树遍历的艺术 🚀 引言 你好,未来的算法大神! 在数据结构的世界里,“树”无疑是最核心、最迷人的概念之一。我们中的大多数人都是从 二叉树 开始入门的,它…...
Android写一个捕获全局异常的工具类
项目开发和实际运行过程中难免会遇到异常发生,系统提供了一个可以捕获全局异常的工具Uncaughtexceptionhandler,它是Thread的子类(就是package java.lang;里线程的Thread)。本文将利用它将设备信息、报错信息以及错误的发生时间都…...
企业大模型服务合规指南:深度解析备案与登记制度
伴随AI技术的爆炸式发展,尤其是大模型(LLM)在各行各业的深度应用和整合,企业利用AI技术提升效率、创新服务的步伐不断加快。无论是像DeepSeek这样的前沿技术提供者,还是积极拥抱AI转型的传统企业,在面向公众…...
