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

【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. 执行计划可视化工具推荐

  1. MySQL Workbench执行计划可视化
  2. Percona Toolkit的pt-visual-explain
  3. 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语言机试编程题

编写版本&#xff1a;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 轻松切换几何体贴图

嗨&#xff0c;我是小路。今天主要和大家分享的主题是“threeJsvue 轻松切换几何体贴图”。 想象一下&#xff0c;手头上正好有个在线3D家具商店&#xff0c;用户不仅可以看到产品的静态图片&#xff0c;还能实时更换沙发的颜色或材质&#xff0c;获得真实的购物体验。…...

Android ObjectBox数据库使用与集成指南

ObjectBox其核心特点ObjectBox与 SQLite 和 Realm 的对比Android集成ObjectBox创建ObjectBox实体对象创建ObjectBox操作管理类OBManager在Application初始化ObjectBox插入或更新数据查询数据统计数据分页数据查询删除数据总结今天分享一套Android另一个数据库ObjectBox。Object…...

【HarmonyOS Next】地图使用详解(一)

背景 这系列文章主要讲解鸿蒙地图的使用&#xff0c;当前可以免费使用&#xff0c;并提供了丰富的SDK给开发者去自定义控件开发。目前可以实现个性化显示地图、位置搜索和路径规划等功能&#xff0c;轻松完成地图构建工作。需要注意的是&#xff0c;现在测试只能使用实体手机去…...

seacmsv9注入管理员账号密码+orderby+limi

1&#xff1a;mysql默认存储引擎innoDB携带的表 1&#xff0c;mysql.innodb_table_stats 2,mysql.innodb_index_stats SELECT table_name FROM mysql.innodb_table_stats WHERE database_name DATABASE(); 2&#xff1a; 关键字做处理 HEX编码:0x696E666F726D6174696F6E5F7…...

aipyy

我用AiPy Pro三小时搞定VMware全自动部署&#xff0c;传统运维方式该退休了&#xff01;AiPy Pro是知道创宇推出的AI智能体软件&#xff0c;能用大白话完成PPT制作、股票量化研究、Excel/PDF/Word文档处理分析、操作电脑/手机/服务器上的软件等复杂任务。今天&#xff0c;我仅用…...

【计算机网络】思科实验:OSPF多区域配置与链路状态数据库解析

1. OSPF多区域配置实战指南 第一次接触OSPF多区域配置时&#xff0c;我被那些LSA类型和区域边界搞得头晕眼花。直到在真实项目里把整个网络搞瘫痪过一次&#xff0c;才真正理解多区域设计的精妙之处。这次我们就用Packet Tracer搭建一个包含Area 0、Area 1和Area 2的完整实验环…...

Windows平台nRF Connect SDK(NCS)一站式环境配置与避坑指南

1. 为什么选择nRF Connect SDK开发&#xff1f; 如果你正在寻找一款适合物联网设备开发的工具链&#xff0c;nRF Connect SDK&#xff08;简称NCS&#xff09;绝对值得考虑。作为Nordic Semiconductor推出的官方开发套件&#xff0c;它基于Zephyr实时操作系统&#xff0c;特别适…...

避坑指南:Ascend 310芯片+CANN工具包在麒麟系统下的5个常见安装错误

Ascend 310芯片CANN工具包在麒麟系统下的5个典型安装陷阱与解决方案 当Ascend 310芯片遇上麒麟操作系统&#xff0c;这种国产硬件的黄金组合本应带来无缝的开发体验&#xff0c;但实际部署中总有几个"暗礁"让开发者措手不及。不同于常规安装教程&#xff0c;本文将直…...

CMOS功耗优化实战:静态与动态功耗的深度解析与设计策略

1. CMOS功耗优化的核心挑战 做低功耗芯片设计的朋友们应该都深有体会&#xff0c;CMOS器件的功耗就像个无底洞&#xff0c;稍不注意就会把电池电量吞噬殆尽。我十年前刚入行时&#xff0c;就曾经因为忽视功耗优化&#xff0c;设计出的芯片续航时间直接腰斩。经过这些年的摸爬滚…...

终极WeMod增强器完整指南:零成本解锁专业版特权功能

终极WeMod增强器完整指南&#xff1a;零成本解锁专业版特权功能 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/gh_mirrors/we/Wand-Enhancer 还在为WeMod专业版的高昂订阅费而烦恼吗…...

tao-8k嵌入模型实战:如何用WebUI轻松实现文本语义相似度计算

tao-8k嵌入模型实战&#xff1a;如何用WebUI轻松实现文本语义相似度计算 1. 引言&#xff1a;从文本到向量的魔法 你有没有想过&#xff0c;计算机是如何“理解”两句话意思差不多的&#xff1f;比如&#xff0c;“今天天气真好”和“阳光明媚的一天”&#xff0c;我们人类一…...

FireRed-OCR Studio保姆级教程:@st.cache_resource缓存机制深度解析

FireRed-OCR Studio保姆级教程&#xff1a;st.cache_resource缓存机制深度解析 1. 为什么需要缓存机制 在开发FireRed-OCR Studio这样的工业级文档解析工具时&#xff0c;我们面临一个关键挑战&#xff1a;模型加载和初始化过程非常耗时。Qwen3-VL这样的多模态大模型通常需要…...

用Multisim搞定LM324带通滤波器:从理论计算到仿真调试的完整避坑指南

用Multisim搞定LM324带通滤波器&#xff1a;从理论计算到仿真调试的完整避坑指南 在电子工程的学习和实践中&#xff0c;带通滤波器的设计与实现是一个经典课题。许多初学者都会遇到这样的困惑&#xff1a;明明按照教科书上的公式计算得一丝不苟&#xff0c;为什么在Multisim中…...

AI原生供应商尽调必查的9个代码层证据:从Dockerfile中CUDA版本锁定,到LangChain trace日志留存策略(附自动化扫描脚本)

第一章&#xff1a;AI原生软件研发供应商评估标准 2026奇点智能技术大会(https://ml-summit.org) AI原生软件研发已从概念验证阶段迈入规模化交付关键期&#xff0c;供应商能力不再仅由传统工程交付周期或代码行数衡量&#xff0c;而需聚焦于模型即服务&#xff08;MaaS&#…...