mysql查看执行计划,分析查询的性能瓶颈

首页 2025-10-13 09:49:37


在 MySQL 中,你可以使用 EXPLAIN 或 EXPLAIN ANALYZE 命令查看 SQL 语句的执行计划,分析查询的性能瓶颈。

基本用法

在 SQL 语句前加上 EXPLAIN 关键字即可:
sql
EXPLAIN SELECT * FROM users WHERE age > 30;
 
如果需要更详细的执行信息(包括实际执行时间),可以使用 EXPLAIN ANALYZE(MySQL 8.0+ 支持):
sql
EXPLAIN ANALYZE SELECT * FROM users WHERE age > 30;
 

执行计划主要字段说明

执行计划结果包含多个字段,关键字段含义如下:
  1. type:表示连接类型,性能从好到差依次为:
    • system > const > eq_ref > ref > range > index > ALL
    • 尽量优化到 range 或更好,避免 ALL(全表扫描)
  2. key:实际使用的索引名称,若为 NULL 表示未使用索引
  3. rows:预估需要扫描的行数,值越小越好
  4. Extra:额外信息,常见重要值:
    • Using index:使用了覆盖索引,性能好
    • Using where:使用了 WHERE 过滤
    • Using filesort:需要额外排序,性能差
    • Using temporary:使用了临时表,性能差

示例

查看一个关联查询的执行计划:
sql
EXPLAIN
SELECT u.name, o.order_no
FROM users u
JOIN orders o ON u.id = o.user_id
WHERE u.age > 25;
 
通过分析执行计划的 typekeyrows 等字段,可以判断是否需要添加索引、优化 SQL 结构或调整表设计来提升查询性能。
MySQL连接就这么简单!本地远程、编程语言连接方法一网打尽
还在为MySQL日期计算头疼?这份加一天操作指南能解决90%问题
MySQL日志到底在哪里?Linux/Windows/macOS全平台查找方法在此
MySQL数据库管理工具全景评测:从Workbench到DBeaver的技术选型指南
MySQL密码忘了怎么办?这份重置指南能救急,Windows/Linux/Mac都适用
你的MySQL为什么经常卡死?可能是锁表在作怪!快速排查方法在此
MySQL单表卡爆怎么办?从策略到实战,一文掌握「分表」救命技巧
清空MySQL数据表千万别用错!DELETE和TRUNCATE这个区别可能导致重大事故
你的MySQL中文排序一团糟?记住这几点,轻松实现准确拼音排序!
别再混淆Hive和MySQL了!读懂它们的天壤之别,才算摸到大数据的门道