【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…...
Prompt Tuning、P-Tuning、Prefix Tuning的区别
一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...
【Oracle APEX开发小技巧12】
有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...
模型参数、模型存储精度、参数与显存
模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...
ssc377d修改flash分区大小
1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...
spring:实例工厂方法获取bean
spring处理使用静态工厂方法获取bean实例,也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下: 定义实例工厂类(Java代码),定义实例工厂(xml),定义调用实例工厂ÿ…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序
一、开发环境准备 工具安装: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 项目初始化: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...
04-初识css
一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...
JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...
为什么要创建 Vue 实例
核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...
