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

为什么MySQL 8.0的存储过程编译开销比MySQL 5.7更低?

大晨同学_6872

大晨同学_6872

发布时间:2026-08-12 09:23:15

|

404人浏览过

|

来源于php中文网

原创

MySQL 8.0 存储过程没有更低的编译开销,首次执行开销通常更高;其执行计划复用条件比5.7更严苛,需SQL文本字节级一致、无用户变量、无非确定性函数、DETERMINISTIC声明与运行行为严格匹配,否则每次调用均触发完整init和权限检查。

为什么mysql 8.0的存储过程编译开销比mysql 5.7更低?

MySQL 8.0 存储过程**没有更低的编译开销**——相反,它的首次执行开销通常更高,且更容易因隐式行为触发重复解析。

SHOW PROFILE 显示大量 init 和 checking permissions 阶段?说明执行计划没复用

这不是编译变快了,而是你误判了“编译”和“执行计划复用”的区别。8.0 中存储过程内部 SQL 的解析树和执行计划缓存复用条件比 5.7 更严苛,稍有不一致就会退回到全路径初始化流程:

  • SQL 文本必须字节级一致(空格、大小写、换行都不能差)
  • 不能含 @var 用户变量(哪怕只读)
  • 不能调用 NOW()、RAND()、UUID() 等非确定性函数
  • 过程定义中写了 DETERMINISTIC,但运行时用了 @a := @a + 1 这类隐式非确定操作,会导致首次执行后被标记为 NOT DETERMINISTIC,后续所有调用都禁用缓存
  • 表结构或统计信息变更(如 ANALYZE TABLE 后),也会使已缓存计划失效

为什么 5.7 看起来“编译快”,而 8.0 总在重新 init?

5.7 对确定性校验宽松,很多带 @var 或 NOW() 的过程仍能复用执行计划;8.0 把过去被忽略的校验显性化了——它不是变慢了,而是把原本隐藏在后台的开销暴露出来:

MySQL
MySQL

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

下载
  • 每次调用都要做更严格的权限检查(尤其涉及 mysql 系统库元数据访问时)
  • 事务隔离级别默认是 REPEATABLE-READ,若过程内含 START TRANSACTION 且未显式设级别,会触发更重的 MVCC 快照初始化
  • 字符集从 utf8 升级到 utf8mb4_0900_ai_ci 后,若字段定义未同步调整,可能引发隐式转换,导致索引失效 + 执行计划重建

如何让 8.0 存储过程真正复用执行计划?

关键不是“降低编译开销”,而是“满足复用条件”:

  • 用 SHOW CREATE PROCEDURE proc_name 检查是否真写了 DETERMINISTIC,且过程体里没藏 NOW() 或用户变量
  • 把时间逻辑改成 IN dt DATETIME 参数传入,而非在过程里调 NOW()
  • 把随机值提前生成好作为 IN 参数传入,别在过程里调 RAND()
  • 确认 SELECT @@transaction_isolation 返回的是 READ-COMMITTED(若业务允许),避免 REPEATABLE-READ 带来的 MVCC 初始化开销
  • 升级后务必跑一次 ANALYZE TABLE,否则 Cost Model 估算失准,也可能导致计划频繁变更
真正容易被忽略的点是:8.0 的“性能下降”往往不是版本问题,而是把 5.7 时代靠宽松校验掩盖的写法缺陷,一次性摊开了。你看到的“编译慢”,其实是系统在告诉你:“这段逻辑本来就不该被缓存”。

热门AI工具

更多
VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

豆包大模型

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

DeepSeek

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

讯飞绘文

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

WorkBuddy

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

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

二狗PPT
二狗PPT Hot

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

相关专题

更多
mysql修改数据表名
mysql修改数据表名

MySQL修改数据表:1、首先查看数据库中所有的表,代码为:‘SHOW TABLES;’;2、修改表名,代码为:‘ALTER TABLE 旧表名 RENAME [TO] 新表名;’。php中文网还提供MySQL的相关下载、相关课程等内容,供大家免费下载使用。

2293

2023.06.20

MySQL创建存储过程
MySQL创建存储过程

存储程序可以分为存储过程和函数,MySQL中创建存储过程和函数使用的语句分别为CREATE PROCEDURE和CREATE FUNCTION。使用CALL语句调用存储过程智能用输出变量返回值。函数可以从语句外调用(通过引用函数名),也能返回标量值。存储过程也可以调用其他存储过程。php中文网还提供MySQL创建存储过程的相关下载、相关课程等内容,供大家免费下载使用。

1399

2023.06.21

mongodb和mysql的区别
mongodb和mysql的区别

mongodb和mysql的区别:1、数据模型;2、查询语言;3、扩展性和性能;4、可靠性。本专题为大家提供mongodb和mysql的区别的相关的文章、下载、课程内容,供大家免费下载体验。

815

2023.07.18

mysql密码忘了怎么查看
mysql密码忘了怎么查看

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql密码忘了怎么办呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

3172

2023.07.19

mysql创建数据库
mysql创建数据库

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql怎么创建数据库呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

5388

2023.07.25

mysql默认事务隔离级别
mysql默认事务隔离级别

MySQL是一种广泛使用的关系型数据库管理系统,它支持事务处理。事务是一组数据库操作,它们作为一个逻辑单元被一起执行。为了保证事务的一致性和隔离性,MySQL提供了不同的事务隔离级别。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

1199

2023.08.08

sqlserver和mysql区别
sqlserver和mysql区别

SQL Server和MySQL是两种广泛使用的关系型数据库管理系统。它们具有相似的功能和用途,但在某些方面存在一些显著的区别。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

5671

2023.08.11

mysql忘记密码
mysql忘记密码

MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。那么忘记mysql密码我们该怎么解决呢?php中文网给大家带来了相关的教程以及其他关于mysql的文章,欢迎大家前来学习阅读。

4942

2023.08.14

Playwright 测试失败怎么办
Playwright 测试失败怎么办

Playwright测试失败专题汇集超时、定位器匹配、浏览器提前关闭、依赖与插件配置、文件上传、SSL及Docker启动等故障文章,并介绍通过截图、报告和Trace定位错误。

0

2026.10.21

热门下载

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

精品课程

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

共1课时 | 188人学习

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

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