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

MySQL EXPLAIN

一、10秒看 EXPLAIN 的顺序

拿到 EXPLAIN 结果后,只看 4列

type
key
rows
extra

检查顺序:

1 看 type
2 看 key
3 看 rows
4 看 extra

二、第1步:看 type(最重要)

执行:

EXPLAIN SELECT * FROM iot_data WHERE order_no='A001';

假设返回:

type key rows
ALL NULL 500000

如果看到:

type = ALL

说明:

全表扫描

IOT / 日志 / 报表表里这是非常危险的。

性能等级:

type 性能
system 最好
const 很好
eq_ref 很好
ref 正常
range 还行
index 一般
ALL 最差 ❌

优化目标:

至少 ref
最好 range

三、第2步:看 key(有没有使用索引)

例如:

possible_keys key
idx_order idx_order

说明:

SQL 使用了 idx_order 索引

如果:

key = NULL

说明:

索引没有用上

原因可能是:

  • 没有索引
  • 类型不一致
  • 函数导致索引失效

四、第3步:看 rows(扫描多少数据)

例如:

rows
100000

意思:

MySQL 预计扫描10万行

优化目标:

数据表规模 建议 rows
100万 <1000
1000万 <5000

如果:

rows = 500000

说明 SQL 会慢。


五、第4步:看 Extra

常见情况:

1 Using index 👍

Using index

说明:

覆盖索引

非常快。


2 Using where

Using where

正常。


3 Using filesort ⚠️

Using filesort

说明:

ORDER BY 没有用索引
需要额外排序

数据多时会慢。


4 Using temporary ⚠️

Using temporary

说明:

使用临时表

一般出现在:

GROUP BY

六、真实例子(报表SQL)

SQL:

SELECT
order_no,
AVG(xbar)
FROM iot_minute_stat
WHERE stat_time BETWEEN '2026-03-10 08:00' AND '2026-03-10 10:00'
GROUP BY order_no

EXPLAIN:

type key rows extra
ALL NULL 1200000 Using where; Using temporary

问题:

全表扫描
120万行
临时表

七、优化方法

建立索引:

CREATE INDEX idx_time_order
ON iot_minute_stat(stat_time,order_no);

再执行:

EXPLAIN SELECT ...

结果:

type key rows
range idx_time_order 3500

性能提升:

120万 → 3500

八、最常见的索引失效原因

很多人遇到:

有索引
但是没用

最常见原因:


1 使用函数

错误:

SELECT * 
FROM iot_data
WHERE DATE(collect_time)='2026-03-10'

索引失效。

正确写法:

SELECT *
FROM iot_data
WHERE collect_time BETWEEN
'2026-03-10 00:00:00'
AND
'2026-03-10 23:59:59'

2 类型不一致

表:

order_no VARCHAR

SQL:

WHERE order_no = 1001

应该:

WHERE order_no = '1001'

3 LIKE 前缀 %

错误:

WHERE name LIKE '%abc'

索引失效。

正确:

WHERE name LIKE 'abc%'

九、报表SQL优化经验

MES / ERP 报表建议:

必建索引

时间
订单
设备
指标

例如:

CREATE INDEX idx_order_tag_time
ON iot_minute_stat(order_no,tag,stat_time);

十、开发人员必备口诀

看 EXPLAIN 时:

type 看扫描方式
key  看索引
rows 看扫描量
extra 看排序临时表

只要看到:

ALL
NULL
rows 很大
Using filesort

就说明 SQL 需要优化。


如果你愿意,我可以再教你 一个非常实用的东西(很多程序员不知道):

如何通过 3 条规则设计索引,让 90% SQL 自动变快

还有:

  • 联合索引正确顺序
  • 为什么有索引但不用
  • 千万级表如何设计索引

这对 你现在做 JSP + MySQL 报表系统会非常有用。

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

相关文章:

  • 2026东南亚整柜交付到美国DDP,性价比高的品牌有哪些 - 工业推荐榜
  • 解锁AI专著生成新方式,优质工具助力学术专著创作
  • 弹窗(取消、确认、切换alert 确认/输入/上床文件弹框)
  • Ubuntu系统安装了Quartus 25.1.1,为什么terminal就是找不到quartus_pgm 和sopc-create-header-files(要设置环境变量)
  • 显示时间
  • AI专著生成工具哪家强?详细测评,为你选出最佳帮手
  • Ubuntu系统安装了Quartus 25.1.1,为什么terminal就是找不到quartus_pgm 和sopc-create-header-files
  • 织梦上传图片弹出提示302的解决办法dedecms
  • 【高精度气象】大宗商品的“天气溢价”:CTA基金已将气象因子纳入高频交易模型的秘密
  • Cursor 四种交互模式
  • 智能网联汽车故障诊断仿真教学软件技术解析——C/S架构落地与全模块实现
  • 2026年十大高端网站建设公司推荐一览表:精选综合实力强的网站搭建供应商与全行业匹配指南 - 博客万
  • Lazarus IDE宏列表
  • 2026年货物运输企业价格大揭秘,知名靠谱企业对比 - 工业设备
  • 织梦dedecms提示tag无效的解决办法
  • 盘点靠谱的监控塔服务商,佳旭钢结构凭啥脱颖而出? - 工业推荐榜
  • 2026新手配资必读:配资网上开户流程与安全专业平台选择 - 博客万
  • 北京高端腕表维修全解析:劳力士积家走时不准,专业修复核心要点 - 时光修表匠
  • Codex SDK 控制台消息解析完全指南
  • dede织梦后台突然打不开或打开后空白如何解决
  • 四川工业酒精哪家好?2026年最新Top5供应商推荐(附资质与服务对比) - 深度智识库
  • Agentic AI vs Copilot:为什么企业AI需要从“辅助工具”升级为“核心协作者” - 博客万
  • 如何通过数字孪生技术提升运营效率?
  • 专知智库OPC研究院 | 未来经济结构核心洞察报告标题:新经济体的基石:个体工商户与“新一人公司”作为核心主力的历史必然性与系统支撑
  • 2026广州灭白蚁优质品牌推荐榜:广州市白蚁防治所/广州治理白蚁/广州治白蚁/广州消杀白蚁公司/广州消灭白蚁/广州灭白蚁公司/选择指南 - 优质品牌商家
  • 专知智库OPC研究院 | 战略研究白皮书标题:新一人公司的战略操作系统:从“人性余行”到“生态位统治”的架构性跃迁
  • 和零售/新零售有关的英文缩写(转)
  • SQL优化实战:从执行计划到索引策略的深度解析
  • 选必1.2 神经调节
  • 企业AI智能体实战:从提示词工程到工作流编排,零代码构建你的第一个数字员工