【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…...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造,完美适配AGV和无人叉车。同时,集成以太网与语音合成技术,为各类高级系统(如MES、调度系统、库位管理、立库等)提供高效便捷的语音交互体验。 L…...

C++实现分布式网络通信框架RPC(3)--rpc调用端
目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...
《Playwright:微软的自动化测试工具详解》
Playwright 简介:声明内容来自网络,将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具,支持 Chrome、Firefox、Safari 等主流浏览器,提供多语言 API(Python、JavaScript、Java、.NET)。它的特点包括&a…...

《通信之道——从微积分到 5G》读书总结
第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...
三体问题详解
从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...
AspectJ 在 Android 中的完整使用指南
一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...
Device Mapper 机制
Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战
说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下,风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...
音视频——I2S 协议详解
I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议,专门用于在数字音频设备之间传输数字音频数据。它由飞利浦(Philips)公司开发,以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...