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

简介: 本文精讲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 100 或 WHERE name LIKE '张%'。​较优​。
  • ​const​:使用主键或唯一索引等值查询,最多返回一行。​完美​。

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

2. rows:预估扫描行数

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

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

3. Extra:附加信息(常见坑)
  • ​Using filesort​:需要额外排序,无法利用索引排序。通常出现在 ORDER BY 字段没索引。优化:给排序字段建索引。
  • ​Using temporary​:使用临时表。常见于 GROUP BY 或 DISTINCT 没有索引。优化:给分组字段建索引。
  • ​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 filesort 或 Using temporary。三列搞定。

小耶在手,SQL不愁。

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

相关文章
|
5月前
|
设计模式 安全 Shell
工作流的 Skill 怎么写?从 7 个顶级 Skill 中提炼的模式与最佳实践
Skill 是一种基于 YAML frontmatter + Markdown 的知识注入机制,通过 `SKILL.md` 文件将结构化指令注入 LLM 上下文,由其调用内置工具(如 bash、read)执行。含 5 大设计模式:线性流程、决策树、循环迭代、接力棒循环、多阶段编排,另含思维框架模式,专用于控制 LLM 深度分析而非操作执行。
|
存储 分布式计算 Hadoop
HDFS 修改副本数&fsck命令
HDFS 修改副本数&fsck命令
1581 0
|
7月前
|
运维 负载均衡 Java
微服务基础1-微服务拆分与服务调用
文章摘要: 本文详细介绍了微服务架构的概念、优势及实现方式。对比单体架构的局限性,微服务通过拆分功能模块实现高内聚、低耦合,提升系统可用性和开发效率。重点讲解了微服务拆分策略(纵向按功能、横向抽通用)、服务注册与发现机制(基于Nacos),以及远程调用方案(RestTemplate和OpenFeign)。OpenFeign通过动态代理简化RPC调用,支持连接池和日志配置,使远程调用如同本地方法。文章还探讨了微服务拆分时机(初创期验证后或大型项目初期直接采用),为不同规模团队提供架构演进建议。
|
5月前
|
SQL 监控 关系型数据库
【MySQL】索引核心:Explain执行计划解读、慢SQL优化全流程
本文系统讲解MySQL索引与慢SQL优化全链路:从B+树原理、聚簇/联合索引设计,到EXPLAIN执行计划深度解读(重点解析type、key、rows、Extra等核心字段),再到慢查询定位、9类索引失效场景及实战优化策略,助力高效根治慢SQL。
|
5月前
|
人工智能 开发框架 自然语言处理
重磅!JBoltAI V4.3发布:AgentRAG让企业A
JBoltAI V4.3发布!首创AgentRAG智能问答框架,突破传统RAG瓶颈,实现“理解→规划→检索→评估→再检索→生成”全链路主动推理。新增执行步骤可视化,提升可调试性与可信度,助力Java企业零重构落地AI智能体应用。(239字)
224 2
|
5月前
|
存储 移动开发 小程序
手把手教你搭建一套知识付费会员小程序系统:课程兑换码+分销裂变+会员体系完整实战
这是一套成熟稳定的开源知识付费系统,支持视频/音频/图文/电子书等多形态课程、VIP会员、分销返佣、课程兑换码及社区互动,基于ThinkPHP6+uni-app开发,可私有部署、数据自主、零平台抽成。(239字)
870 0
|
5月前
|
小程序 前端开发 API
一套陪诊系统源码,如何支撑多端(APP+小程序+后台)统一开发?
随着陪诊服务数字化升级,多端开发成为行业刚需。本文从技术架构角度出发,深入解析陪诊系统源码如何通过“后端统一+前端适配+后台调度”的方式,实现APP、小程序与管理后台的高效协同。
|
5月前
|
JSON 数据挖掘 API
Python 实现速卖通(AliExpress)商品详情 API 数据准确性校验
简洁可直接使用,适配跨境电商商品同步、数据分析、铺货上货场景。
|
5月前
|
人工智能 缓存 自然语言处理
阿里云AI通用节省计划是什么?节省计划特点、折扣信息与使用管理解析
阿里云大模型服务平台百炼的AI通用型节省计划,是专为按量付费场景设计的折扣方案,核心特点包括覆盖全面、阶梯式折扣、灵活生效及自动抵扣,最高可享5.3折优惠。用户承诺的月消费金额越高、周期越长,折扣越大,且额度按月独立计算,不可累积。该计划支持跨模型使用,新用户更可享超7000万免费tokens。由于覆盖广、折扣高、灵活性强,AI通用型节省计划成为绝大多数用户的首选,助力用户显著降低模型调用成本。
|
5月前
|
人工智能 前端开发 API
AI 英语伴学 APP 的开发费用
开发AI英语伴学APP费用差异大:MVP版5–15万元(低代码+外包),商业级需60–100万元(含4–6个月研发+首半年运营)。成本主含人力、AI算力(Token/纠音API)及云服务。省钱关键:聚焦口语核心、混合调用模型、跨端开发。#AI英语 #AI教育