EXPLAIN看不懂?3个字段就能破案

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
云数据库 PolarDB MySQL 版,列存表分析加速 4核8GB
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
简介: 本文精讲EXPLAIN三核心列:type(访问类型)、rows(扫描行数)、Extra(附加信息),助你快速定位80%慢SQL问题,附真实优化案例与口诀技巧。

我是小耶,干运营半路出家的野生DBA——写功课只是为了我踩过的坑,你们别再踩了!

上周讲了慢查询怎么抓。抓到慢SQL之后呢?很多同学执行完 EXPLAIN SELECT ... 看着输出结果一脸懵:type、rows、Extra 都是啥?

今天只说三列。看懂这三列,80%的慢SQL你就能自己分析。

1. type:访问类型(最核心)
  • ALL​:全表扫描。数据库把整张表从头读到尾。​危险指数:爆表​。看到这个,必须优化(加索引或改写SQL)。
  • ref​:使用非唯一索引查找。比如 WHERE name = '张三' 且 name 列有普通索引。​还行,但注意扫描行数​。
  • range​:使用索引范围扫描。比如 WHERE id BETWEEN 1 AND 100WHERE name LIKE '张%'。​较优​。
  • const​:使用主键或唯一索引等值查询,最多返回一行。​完美​。

记忆口诀:​const > range > ref > ALL​。越靠左越好。

2. rows:预估扫描行数

这个数字是优化器估算的需要检查的行数(不是最终返回的行数)。数字越大,查询越慢。如果显示 rows = 1000000,说明要扫一百万行,大概率有索引没生效。

注意:rows 是估算值,不同引擎统计可能不准,但趋势很有参考价值。

3. Extra:附加信息(常见坑)
  • Using filesort​:需要额外排序,无法利用索引排序。通常出现在 ORDER BY 字段没索引。优化:给排序字段建索引。
  • Using temporary​:使用临时表。常见于 GROUP BYDISTINCT 没有索引。优化:给分组字段建索引。
  • Using index​:覆盖索引,数据直接从索引获取,不回表。​这是好事​。
  • Using where​:通过索引过滤后还有额外条件需要回表检查。一般正常。
  • Using index condition​:MySQL 5.6+ 的索引下推优化,​不错​。
实战案例

某条慢查询:

EXPLAIN SELECT * FROM orders WHERE DATE(order_date) = '2026-05-01';

结果:type=ALL, rows=5000000, Extra=Using where

问题:对索引列用了函数 DATE(),导致索引失效,全表扫描500万行。

改写:

EXPLAIN SELECT * FROM orders WHERE order_date >= '2026-05-01' AND order_date < '2026-05-02';

结果:type=range, rows=523, Extra=Using index condition

速度快了几千倍。

小技巧
  • FORMAT=JSON 可看更详细成本:EXPLAIN FORMAT=JSON SELECT ...
  • 生产环境谨慎使用 EXPLAIN,它不会真的执行查询,安全。

小结​:遇到慢SQL,先看 type 是不是 ALL;再看 rows 是不是很大;最后看 Extra 有没有 Using filesortUsing temporary。三列搞定。

小耶在手,SQL不愁。

你今天 EXPLAIN 了没?晒出你的 type 列,我帮你把把脉。

相关文章
|
9天前
|
设计模式 安全 Shell
工作流的 Skill 怎么写?从 7 个顶级 Skill 中提炼的模式与最佳实践
Skill 是一种基于 YAML frontmatter + Markdown 的知识注入机制,通过 `SKILL.md` 文件将结构化指令注入 LLM 上下文,由其调用内置工具(如 bash、read)执行。含 5 大设计模式:线性流程、决策树、循环迭代、接力棒循环、多阶段编排,另含思维框架模式,专用于控制 LLM 深度分析而非操作执行。
|
存储 分布式计算 Hadoop
HDFS 修改副本数&fsck命令
HDFS 修改副本数&fsck命令
1407 0
|
2月前
|
运维 负载均衡 Java
微服务基础1-微服务拆分与服务调用
文章摘要: 本文详细介绍了微服务架构的概念、优势及实现方式。对比单体架构的局限性,微服务通过拆分功能模块实现高内聚、低耦合,提升系统可用性和开发效率。重点讲解了微服务拆分策略(纵向按功能、横向抽通用)、服务注册与发现机制(基于Nacos),以及远程调用方案(RestTemplate和OpenFeign)。OpenFeign通过动态代理简化RPC调用,支持连接池和日志配置,使远程调用如同本地方法。文章还探讨了微服务拆分时机(初创期验证后或大型项目初期直接采用),为不同规模团队提供架构演进建议。
|
24天前
|
SQL 数据库 数据库管理
从运营到DBA,我用了这3个“偷懒”方法学SQL
用运营人思维教小白轻松学SQL:①把SQL当Excel对话,理解SELECT/FROM/WHERE;②建“报错翻译本”,快速定位解决错误;③用“填空题法”抄改练,复用模板上手。不求完美,先跑通、看懂、不崩溃!
从运营到DBA,我用了这3个“偷懒”方法学SQL
|
4天前
|
SQL 监控 关系型数据库
【MySQL】索引核心:Explain执行计划解读、慢SQL优化全流程
本文系统讲解MySQL索引与慢SQL优化全链路:从B+树原理、聚簇/联合索引设计,到EXPLAIN执行计划深度解读(重点解析type、key、rows、Extra等核心字段),再到慢查询定位、9类索引失效场景及实战优化策略,助力高效根治慢SQL。
|
9天前
|
机器学习/深度学习 监控 安全
公共安全打架行为识别数据集分享(适用于YOLO系列深度学习检测任务)
本数据集含3000张真实场景图像(校园、商场、街道等),已划分训练/验证集,YOLO/COCO双格式标注,涵盖打架人员与普通人员两类目标,支持YOLOv5/v8等模型直接训练,助力公共安全智能监控与异常行为识别研究。(239字)
90 3
|
9天前
|
人工智能 自然语言处理 前端开发
零基础如何入门Vibe Coding:别怕,你离“开发者”只差一个AI的距离
在AI时代,“氛围编程”(Vibe Coding)正打破编程门槛:无需基础,不用背语法,只需用自然语言描述想法,AI即刻生成可用代码。本文以商科小白视角,揭秘如何零基础用AiPy等工具实现自动化办公、创意网页、数据分析等真实场景,让每个人成为数字世界的创造者。
|
16天前
|
SQL JSON 关系型数据库
慢SQL排查三板斧:SHOW PROCESSLIST + 慢查询日志 + EXPLAIN 实战
教你三招快速定位CPU 100%元凶:SHOW PROCESSLIST查活跃查询、开启慢日志+mysqldumpslow分析、EXPLAIN深度诊断SQL性能。干货不啰嗦,专治线上急症!
|
9天前
|
JSON 数据挖掘 API
Python 实现速卖通(AliExpress)商品详情 API 数据准确性校验
简洁可直接使用,适配跨境电商商品同步、数据分析、铺货上货场景。
|
9天前
|
搜索推荐 前端开发 机器人
从0到1打造一个专属办公Agent:围绕周报、会议纪要与任务分发的完整过程
本文分享从0到1打造轻量办公Agent的实战经验:聚焦周报生成、会议纪要提炼与任务自动分发三大刚需。不堆术语、不求全能,用Python+API+简单Prompt,两周落地可用方案,日均节省1小时重复劳动,让团队告别“记不住、找不到、没人跟”。
113 0