0

0

mysql执行器在SQL流程中负责什么_SQL执行角色说明

P粉602998670

P粉602998670

发布时间:2026-01-06 11:05:02

|

584人浏览过

|

来源于php中文网

原创

执行器是SQL执行阶段的核心组件,负责按执行计划调用存储引擎接口完成数据操作,并在校验字段级权限、处理锁冲突、协调多引擎JOIN、响应事务隔离级别等方面起关键作用。

mysql执行器在sql流程中负责什么_sql执行角色说明

执行器是SQL真正干活的“操作员”

执行器不解析语法、不选索引、不验权限(权限已在连接器阶段缓存,但执行器会再做一次校验),它只干一件事:按优化器生成的执行计划,调用存储引擎接口,把数据读出来、写进去、删掉或改掉,并把结果组装好返回给客户端。

执行器为什么还要再查一次权限?

因为权限缓存在连接器阶段只读取一次,而执行器面对的是具体表和字段——比如你有 SELECT 权限,但没被授予对 users.phone 字段的访问权,执行器在真正访问该字段时就会报错:

ERROR 1142 (42000): SELECT command denied to user 'app'@'%' for column 'phone' in table 'users'
  • 权限检查发生在打开表之后、读取数据之前
  • 即使 SELECT * 语句能通过分析器,执行器仍可能因字段级权限不足而中断
  • 视图、触发器、存储过程内部的 SQL,其字段权限也由执行器动态校验

执行器如何与存储引擎协作?

执行器本身不存数据,它只调用统一接口,具体行为由表使用的存储引擎决定:

WOMBO
WOMBO

使用AI创作美丽的艺术品

下载
  • InnoDB 表:执行器调用 ha_innobase::rnd_next()index_read() 等接口,走聚簇索引或二级索引扫描
  • Memory 表:执行器调用内存哈希/树结构接口,无磁盘 I/O
  • 如果 SQL 中涉及多个引擎(如 JOIN InnoDBMyISAM 表),执行器需分别调用各自引擎 API,协调数据流转
  • 遇到锁冲突(如行锁等待)、事务隔离级别限制(如不可重复读下看到旧版本),也是执行器层感知并响应

容易被忽略的执行器行为细节

很多慢查询或报错看似在“查不到数据”,其实卡在执行器阶段:

  • SELECT ... FOR UPDATE 在执行器尝试加锁时阻塞,不是优化器问题,也不是网络问题
  • 执行器发现表不存在(ERROR 1146 (42S02))是在打开表时才报,而非分析器阶段——因为表名可能来自变量或视图展开
  • 使用 FORCE INDEX 后仍走错索引?那大概率是执行器已拿到计划,但存储引擎实际执行时因统计信息过期或锁状态绕开了预期路径
  • 执行器返回结果前会做字符集转换、时间戳时区调整、NULL 处理等——这些开销在 SHOW PROFILESending data 阶段体现,不是纯 I/O
执行器表面只是“执行”,但它才是整个流程里最贴近真实数据、最常暴露权限/锁/引擎差异的环节。调试时别只盯着 EXPLAIN,要配合 SHOW PROFILE FOR QUERY NINFORMATION_SCHEMA.INNODB_TRX 看它到底卡在哪一步。

相关专题

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

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

676

2023.10.12

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

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

320

2023.10.27

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

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

346

2024.02.23

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

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

1092

2024.03.06

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

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

356

2024.03.06

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

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

674

2024.04.07

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

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

571

2024.04.29

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

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

412

2024.04.29

PPT动态图表制作教程大全
PPT动态图表制作教程大全

本专题整合了PPT动态图表制作相关教程,阅读专题下面的文章了解更多详细内容。

13

2026.01.07

热门下载

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

精品课程

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

共48课时 | 1.6万人学习

MySQL 初学入门(mosh老师)
MySQL 初学入门(mosh老师)

共3课时 | 0.3万人学习

简单聊聊mysql8与网络通信
简单聊聊mysql8与网络通信

共1课时 | 783人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号