2025/12/28 12:46:56
网站建设
项目流程
保安公司哪家好,视频号排名优化帝搜软件,黄骅烈士,做封面哪个网站好一条 SQL 在 MySQL 中的执行#xff0c;是一个贯穿服务层与存储引擎层的精密过程。第一阶段#xff1a;服务层处理#xff08;连接、解析与规划#xff09;连接器
职责#xff1a;管理客户端连接、身份认证与权限校验。详细过程#xff1a;客户端通过TCP连接后#xff0…一条 SQL 在 MySQL 中的执行是一个贯穿服务层与存储引擎层的精密过程。第一阶段服务层处理连接、解析与规划连接器职责管理客户端连接、身份认证与权限校验。详细过程客户端通过TCP连接后连接器验证用户名、密码和主机权限。认证通过后连接器会从权限表加载该用户的权限信息并在本次连接中生效。这意味着即使中途修改了用户权限当前已建立的连接也不会受影响除非重新连接。查询缓存MySQL 8.0 版本已移除历史作用在早期版本中MySQL会先检查查询缓存。如果SQL语句完全一致和数据库环境如数据库、客户端协议命中缓存则直接返回结果跳过后续所有复杂步骤。为何移除由于缓存失效非常频繁表有任何更新该表所有查询缓存都会清空在读写频繁的系统中查询缓存往往弊大于利。自MySQL 8.0起该功能已被彻底删除。分析器职责理解SQL语句的字面含义。词法分析将SQL字符串拆解成一个个“词元”token。例如识别SELECT是查询关键字users是表名id是列名。语法分析根据MySQL语法规则检查这些“词元”组合成的SQL语句是否合法。如果语法错误如少写了关键字你会收到熟悉的You have an error in your SQL syntax错误提示。优化器职责决定SQL语句的最佳执行方案。这是“大脑”决策环节。核心工作选择索引当表有多个索引时优化器会根据数据分布统计信息、查询条件、排序等因素估算不同索引的I/O成本和CPU成本选择它认为成本最低的索引。例如WHERE id 1 AND name ‘Alice’可能选择id的索引。决定连接顺序如果是多表连接JOIN优化器会决定先读取哪张表驱动表以及连接的顺序。重写查询对条件进行一些等价转换简化执行。输出优化器最终生成一个执行计划。你可以通过EXPLAIN命令来查看这个计划。执行器职责根据执行计划调用存储引擎的接口逐步完成查询。详细过程在执行前会再次检查用户对目标表是否有操作权限如果命中查询缓存则会在返回缓存结果时校验权限。根据执行计划打开表调用存储引擎接口获取数据。第二阶段存储引擎层处理数据存取存储引擎职责负责数据的实际存储和读写。MySQL采用插件式架构支持InnoDB、MyISAM等多种引擎目前InnoDB是默认且绝对主流的引擎。以InnoDB执行一个SELECT为例执行器通过引擎接口请求满足条件的第一行例如请求id1的行。InnoDB引擎首先检查缓冲池中是否已有所需数据页。如果有缓存命中则直接返回如果没有缓存未命中则从磁盘加载对应的数据页到缓冲池然后返回数据。执行器获取第一行后会继续调用引擎接口请求“下一行”直到遍历完所有满足条件的行。以InnoDB执行一个UPDATE为例更复杂涉及事务执行器调用引擎接口获取满足条件的行过程同SELECT。执行器将待更新数据传给引擎。引擎首先将旧数据写入Undo Log用于回滚和MVCC。然后在缓冲池中更新数据行并将更新操作记录到Redo Log Buffer中。执行器提交事务时Redo Log会按照一定策略刷盘确保持久性而数据页本身可能还在缓冲池中等待后台线程异步刷回磁盘。这就是WALWrite-Ahead Logging技术。第三阶段结果返回结果返回执行器将获取到的所有满足条件的行组织成结果集。如果是慢查询记录会写入Slow Query Log。最终结果集通过网络协议返回给客户端。核心要点总结两阶段分工服务层负责SQL处理与逻辑存储引擎负责数据存取。这种设计提供了灵活性。关键优化点优化器选择的执行计划和存储引擎的I/O效率尤其是缓冲池命中率是性能关键。更新操作的区别更新操作会涉及事务日志Redo Log, Undo Log以保证ACID特性流程比SELECT更复杂。