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

mysql数据设计中的性能分析工具

EXPLAIN 是 MySQL 中最重要的查询性能分析工具,它能显示 MySQL 如何执行 SQL 语句,包括访问表的方式、使用的索引、连接顺序等。通过分析 EXPLAIN 的输出,我们可以快速定位查询性能问题并进行优化。

 ✅ 一、如何使用 EXPLAIN

EXPLAIN SELECT * FROM users WHERE id = 1;

-- 或者更详细的分析(MySQL 8.0.18+)

EXPLAIN ANALYZE SELECT * FROM users WHERE id = 1;

✅ 二、EXPLAIN 输出字段详解

运行 EXPLAIN 后,会返回多行结果,每行代表一个表的访问计划。以下是各列的详细说明:

列名说明
id 查询的标识符,相同 id 表示同一查询计划,数字越大越先执行
select_type 查询类型(如 SIMPLE、PRIMARY、SUBQUERY 等)
table 正在访问的表名
partitions 匹配的分区(如果表已分区)
type 访问类型(性能从好到坏)
possible_keys 可能使用的索引
key 实际使用的索引
key_len 使用的索引长度(越短越好)
ref 与索引比较的列或常量
rows MySQL 估计需要扫描的行数(越少越好)
filtered 按表条件过滤后的行百分比
Extra 额外信息(如 Using index、Using filesort 等)

✅ 三、关键字段详解

🔹 type 列(访问类型)- 最重要

类型性能说明
system ✅ 最好 表只有一行(系统表)
const ✅ 很好 通过主键或唯一索引查找,最多返回一行
eq_ref ✅ 很好 多表连接时,使用主键或唯一索引
ref ✅ 好 使用非唯一索引查找
range ✅ 还行 使用索引进行范围查询(如 WHERE id > 10
index ⚠️ 一般 全索引扫描(比全表扫描快,但仍有性能问题)
ALL ❌ 最差 全表扫描,应尽量避免

 

Extra 列(额外信息)- 性能优化关键

内容说明优化建议
Using index ✅ 使用覆盖索引,无需回表 性能很好,无需优化
Using index condition ✅ 使用索引条件下推(ICP) 性能良好
Using where ⚠️ 需要 MySQL 服务器层过滤 可能需要优化索引
Using filesort ❌ 需要额外排序 重点优化对象
Using temporary ❌ 需要临时表(如 GROUP BY) 重点优化对象
Using join buffer ⚠️ 使用连接缓冲区 可能需要优化连接顺序

 

🔹 rows 列

  • MySQL 估计需要扫描的行数
  • 数值越小越好
  • 如果 rows 接近表总行数,说明是全表扫描

✅ 四、实际示例分析

示例 1:良好性能(const + Using index

EXPLAIN SELECT id, name FROM users WHERE id = 1;
id  select_type  table  type   key        key_len  ref    rows  Extra
1   SIMPLE       users  const  PRIMARY    4        const  1     Using index

✅ 分析:

  • type: const - 主键查询,性能最优
  • key: PRIMARY - 使用主键索引
  • rows: 1 - 只扫描 1 行
  • Extra: Using index - 覆盖索引,无需回表

示例 2:中等性能(ref + Using where

EXPLAIN SELECT * FROM orders WHERE user_id = 123;
id  select_type  table   type  key           key_len  ref     rows  Extra
1   SIMPLE       orders  ref   idx_user_id   4        const   100   Using where

⚠️ 分析:

  • type: ref - 使用非唯一索引,性能还行
  • key: idx_user_id - 使用了索引
  • rows: 100 - 扫描 100 行
  • Extra: Using where - 索引无法覆盖所有字段,需回表 + 服务器层过滤

示例 3:性能问题(ALL + Using filesort

EXPLAIN SELECT * FROM products ORDER BY price DESC;
id  select_type  table     type  key     key_len  ref   rows  Extra
1   SIMPLE       products  ALL   NULL    NULL     NULL  10000 Using filesort

❌ 分析:

  • type: ALL - 全表扫描,性能很差
  • key: NULL - 无索引可用
  • rows: 10000 - 扫描 10000 行
  • Extra: Using filesort - 需要额外排序

✅ 优化建议:

CREATE INDEX idx_price ON products (price);

示例 4:多表连接(eq_ref + ref

EXPLAIN SELECT u.name, o.amount 
FROM users u 
JOIN orders o ON u.id = o.user_id 
WHERE u.status = 'active';

id  select_type  table  type   key           key_len  ref           rows  Extra
1   SIMPLE       u      ref    idx_status    767      const         100   Using where
1   SIMPLE       o      eq_ref PRIMARY       4        test.u.id     1     NULL

✅ 分析:

  • u 表:type: ref - 通过 status 索引扫描
  • o 表:type: eq_ref - 通过主键连接,性能很好

✅ 五、EXPLAIN FORMAT 选项

1. 默认格式(表格)

EXPLAIN SELECT ...;

2. JSON 格式(更详细)

EXPLAIN FORMAT=JSON SELECT ...;

3. TREE 格式(MySQL 8.0.12+)

EXPLAIN FORMAT=TREE SELECT ...;

✅ 六、性能优化 checklist

使用 EXPLAIN 时重点关注:

检查项标准优化方向
type 避免 ALL,尽量 ref 以上 创建索引
key 应显示实际使用的索引 检查索引是否存在
rows 越少越好(远小于表总行数) 优化 WHERE 条件
Extra 避免 Using filesort/Using temporary 创建复合索引或覆盖索引
possible_keys 应包含有效的索引 检查查询条件是否能使用索引

✅ 七、高级技巧

1. 使用 EXPLAIN ANALYZE(MySQL 8.0.18+)

EXPLAIN ANALYZE SELECT * FROM users WHERE id = 1;
显示实际执行时间、行数等统计信息。

2. 检查索引使用情况

-- 查看表的索引
SHOW INDEX FROM table_name;-- 查看表结构
SHOW CREATE TABLE table_name;

3. 使用 FORMAT=JSON 检查复杂查询

EXPLAIN FORMAT=JSON SELECT ...;
-- 查看是否使用了 ICP、MRR 等优化技术

✅ 总结

EXPLAIN 是 MySQL 性能调优的必备工具,重点掌握:

  1. type 列:判断访问效率(const > ref > range > index > ALL
  2. Extra 列:发现性能瓶颈(如 Using filesortUsing temporary
  3. rows 列:评估查询成本
  4. 索引设计:(WHERE字段, ORDER BY字段, SELECT字段) 顺序





http://www.jsqmd.com/news/40461/

相关文章:

  • 2025北京日式搬家公司企业推荐:单位搬家公司/北京搬家公司电话/全流程服务与技术实力深度解析
  • 2025年第43周数字取证与事件响应技术动态
  • 深入解析:【Linux基础学习】Linux Ubuntu 权限管理:从入门到精通
  • 实验室纯水设备厂家调研,梳理主流厂商与区域优势
  • 看不见的核安全:核控制系统如何降低测试风险?
  • JAVA连接SFTP服务器报错:cn.hutool.extra.ssh.JschRuntimeException: JSchException: Packet corrupt
  • 革命你的 Git 提交消息 - GIM 1.8.0 发布了!
  • 2025 年石笼网厂家最新推荐排行榜:箱形 / 网垫 / 袋形 / 帘形全品类,电镀锌 / 锌铝合金 / 电焊材质优质厂家权威推荐
  • spark热点key导致的数据倾斜复现和加盐处理 - 指南
  • 企业级管理系统的站内信怎么轻量级优雅实现
  • 2025 年最新推荐铝板厂家排行榜,涵盖 5052/6061/7075 铝板及纯铝板/高纯铝板优质供应商精选
  • Netty和Tomcat
  • 2025 年最新推荐铝管厂家权威排行榜:无缝铝管/合金铝管/6061/2A12 铝管优质企业综合测评推荐
  • 【计算机、信息技术、电子、人工智能等均可投】第二届图像、信号处理与通信技术国际学术会议(ISPCT 2025)
  • 2025 年微矩形 /圆形/矩形电连接器厂家最新推荐排行榜,涵盖 MDC/ZMDM/Y50X 等系列优质品牌精选
  • 2025 年 11 月铝合金门窗厂家推荐排行榜,断桥门窗,系统门窗,金属门窗,阳台门窗,平开推拉折叠门窗公司精选
  • 2025 年 11 月电动调节阀厂家推荐排行榜,西门子/霍尼韦尔/鲁泽节能,比例阀/蒸汽温控阀/二通阀/阀执行器公司精选
  • P9902 『PG2』模拟最大流 题解
  • 2025 年 11 月蒸汽调节阀厂家推荐排行榜,上海鲁泽/西门子/霍尼韦尔蒸汽调节阀,西门子蒸汽比例调节阀,蒸汽温控阀公司推荐
  • 2025年自动钢筋弯曲生产厂家权威推荐榜单:钢筋自动弯曲/数控式钢筋弯曲中心/钢筋自动弯曲中心源头厂家精选
  • C++ 进阶知识点详细教程 - 第3部分
  • SQL 中 SELECT 查询语句知识点
  • 2025 年 11 月毛刷辊厂家推荐排行榜,工业毛刷辊,定做毛刷辊,清洁毛刷辊,纺织毛刷辊,钢制毛刷辊公司精选
  • 2025 年 11 月合肥搬家公司推荐排行榜,合肥正规搬家公司,合肥市搬家公司,包河区搬家公司,蜀山区搬家公司,专业高效与贴心服务口碑之选
  • 消息队列原理和对比
  • Ancora GaN 基础知识
  • 2025年自动挤出机订做厂家权威推荐榜单:挤出造粒机/实验室挤出机/双螺杆挤出机源头厂家精选
  • 2025年包装箱厂家权威推荐榜单:物流纸箱/精裱盒/服装包装箱源头厂家精选
  • XXL-JOB从入门到进阶——架构架构、核心原理
  • vue2 组件封装 el-input