讲师中心 微信公众号
AI工具推荐 视频效率加速

MySQL存储过程执行变慢时如何通过EXPLAIN分析内部SQL

浅杰姑娘_4389

浅杰姑娘_4389

发布时间:2026-10-10 12:38:01

|

966人浏览过

|

来源于php中文网

原创

存储过程无法直接EXPLAIN,需提取内部SQL替换变量后单独分析;重点关注type、key、rows三项,确保索引有效、统计信息准确,并优化临时表、JSON及循环等隐形开销。

mysql存储过程执行变慢时如何通过explain分析内部sql

存储过程不能直接 EXPLAIN,必须拆出内部 SQL 单独分析

执行 EXPLAIN CALL proc_name() 会报错或返回无效结果——MySQL 不支持对存储过程整体做执行计划分析。真正要盯的,是过程体里那几条关键 SELECT、UPDATE 或带 JOIN 的语句。

操作步骤很直接:

  • 用 SHOW CREATE PROCEDURE proc_name 查看定义,复制出目标 SQL(尤其注意含 WHERE、ORDER BY、GROUP BY 的)
  • 把变量替换成真实值:比如原句是 WHERE user_id = in_uid,测试时得写成 WHERE user_id = 12345
  • 在语句前加 EXPLAIN 执行,别带 INTO 或游标逻辑,否则无法分析

EXPLAIN 输出里只盯 type、key、rows 这三项

其他字段容易干扰判断,真正决定快慢的就这三个:

  • type 是 ALL?说明全表扫描,立刻检查 WHERE 条件列是否建索引,有没有被函数包裹(如 WHERE DATE(created_at) = '2026-09-01')
  • key 显示 NULL 或不是你预期的索引名?常见原因是隐式类型转换(比如参数定义为 VARCHAR,但字段是 BIGINT),或条件用了非最左前缀(INDEX(a,b,c) 却只查 b = ?)
  • rows 值远超实际匹配数(比如查 5 行却扫 80 万行)?大概率是统计信息过期,执行 ANALYZE TABLE table_name 再试

变量传参会让 EXPLAIN 失效,必须代入具体值

在存储过程中写 WHERE id = p_id 然后直接 EXPLAIN,优化器看不到真实值,rows 估算会严重失真,甚至弃用索引走 ALL。

MySQL
MySQL

编写正确的MySQL查询,避免字符集、索引和锁方面的常见陷阱。

下载

正确做法只有两种:

  • 手动替换为真实值再 EXPLAIN,比如 WHERE id = 789
  • 如果过程里用了 PREPARE + EXECUTE 动态拼接,先用 SELECT @sql 把最终生成的 SQL 打出来,再对它 EXPLAIN

别信“加了 FORCE INDEX 就能好”——这只是验证手段,不能当长期解法;根本问题还是让优化器能基于真实值做决策。

别漏掉临时表、JSON、循环这些隐形开销点

它们在 EXPLAIN 里不显眼,但实际耗时可能占大头:

  • CREATE TEMPORARY TABLE 默认可能落磁盘,尤其 tmp_table_size 不够时;可临时调大测试:SET SESSION tmp_table_size = 268435456
  • 反复用 JSON_EXTRACT(json_col, '$.status') 做条件,比普通字段慢 3–5 倍;建议提前冗余为 status VARCHAR(32) 并建索引
  • 循环里单条 INSERT INTO log VALUES (…),不如拼成批量:INSERT INTO log VALUES (), (), ()

真正卡住的往往不是“存储过程”这个壳,而是某条没被 EXPLAIN 到的 SQL —— 它可能因为一次未更新的统计信息、一个没覆盖的索引字段,或者一个没加索引的临时表,在后台悄悄吃掉 90% 的时间。

热门AI工具

更多
讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

4163

2023.10.12

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

891

2023.10.27

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

1089

2024.02.23

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

6041

2024.03.06

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

2923

2024.03.06

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

6020

2024.04.07

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

8081

2024.04.29

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

1110

2024.04.29

PixTV官网入口地址合集
PixTV官网入口地址合集

本专题汇总了 PixTV AI 一站式视频创作平台的官方入口与使用教程。无需下载软件,浏览器直接访问即可使用。平台将剧本、图像、视频、声音与剪辑整合在“无限画布”中,接入 GPT Image 2.5、Seedance 2.5 等头部模型。本专题整理了从新建画布、角色锚定、分镜拆分到视频生成与导出的完整操作指南,助你快速上手 AI 短剧与漫剧创作。

20

2026.10.10

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL vs MySQL
PostgreSQL vs MySQL

共1课时 | 183人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn