当前位置: 首页 > 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存储引擎层未过滤数据检查索引覆盖情况
http://www.lryc.cn/news/543640.html

相关文章:

  • 论文笔记(七十二)Reward Centering(五)
  • Linux内核自定义协议族开发指南:理解net_device_ops、proto_ops与net_proto_family
  • SOME/IP-SD -- 协议英文原文讲解6
  • 【数据处理】COCO 数据集掩码 Run-Length Encoding (RLE) 编码转二进制掩码
  • Java中的缓存技术:Guava Cache vs Caffeine vs Redis
  • Day8 蓝桥杯acw讲解
  • 《Operating System Concepts》阅读笔记:p147-p158
  • JSON Schema 入门指南:如何定义和验证 JSON 数据结构
  • java后端开发day20--面向对象进阶(一)--static继承
  • FastJSON 默认行为:JSON.toJSONString 忽略 null 字段
  • 数据结构:基数排序(c++实现)
  • DOM 事件 HTML 标签属性速查手册
  • PhotoShop学习01
  • mongodb【实用教程】
  • C语言机试编程题
  • threeJs+vue 轻松切换几何体贴图
  • Android ObjectBox数据库使用与集成指南
  • 【HarmonyOS Next】地图使用详解(一)
  • seacmsv9注入管理员账号密码+orderby+limi
  • C#与AI的交互(以DeepSeek为例)
  • 面试八股文--数据库基础知识总结(2) MySQL
  • Failed to start The PHP FastCGI Process Manager.
  • 软件供应链安全工具链研究系列——RASP自适应威胁免疫平台(上篇)
  • Spring Boot集成MyBatis访问MySQL:从项目搭建到基础数据库查询(基础入门)
  • 一周学会Flask3 Python Web开发-Jinja2模板继承和include标签使用
  • 【2025.2.25更新】wordpress免费AI插件,文章内容、图片自动生成、视频自动生成、网站AI客服、批量采集文章,内置deepseek联网满血版
  • 待解决 leetcode71 简化路径 栈的应用
  • 数据安全_笔记系列09_人工智能(AI)与机器学习(ML)在数据安全中的深度应用
  • RocketMQ 可观测性最佳实践
  • P9420 [蓝桥杯 2023 国 B] 子 2023