news 2026/6/3 12:28:44

详细描述一条 SQL 在 MySQL 中的执行过程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
详细描述一条 SQL 在 MySQL 中的执行过程

一条 SQL 在 MySQL 中的执行,是一个贯穿服务层存储引擎层的精密过程。

第一阶段:服务层处理(连接、解析与规划)

  1. 连接器

    • 职责:管理客户端连接、身份认证与权限校验。
    • 详细过程:客户端通过TCP连接后,连接器验证用户名、密码和主机权限。认证通过后,连接器会从权限表加载该用户的权限信息,并在本次连接中生效。这意味着,即使中途修改了用户权限,当前已建立的连接也不会受影响,除非重新连接。
  2. 查询缓存(MySQL 8.0 版本已移除)

    • 历史作用:在早期版本中,MySQL会先检查查询缓存。如果SQL语句(完全一致)和数据库环境(如数据库、客户端协议)命中缓存,则直接返回结果,跳过后续所有复杂步骤。
    • 为何移除:由于缓存失效非常频繁(表有任何更新,该表所有查询缓存都会清空),在读写频繁的系统中,查询缓存往往弊大于利。自MySQL 8.0起,该功能已被彻底删除。
  3. 分析器

    • 职责:理解SQL语句的字面含义。
    • 词法分析:将SQL字符串拆解成一个个“词元”(token)。例如,识别SELECT是查询关键字,users是表名,id是列名。
    • 语法分析:根据MySQL语法规则,检查这些“词元”组合成的SQL语句是否合法。如果语法错误(如少写了关键字),你会收到熟悉的You have an error in your SQL syntax错误提示。
  4. 优化器

    • 职责:决定SQL语句的最佳执行方案。这是“大脑”决策环节。
    • 核心工作
      • 选择索引:当表有多个索引时,优化器会根据数据分布(统计信息)、查询条件、排序等因素,估算不同索引的I/O成本CPU成本,选择它认为成本最低的索引。例如,WHERE id = 1 AND name = ‘Alice’,可能选择id的索引。
      • 决定连接顺序:如果是多表连接(JOIN),优化器会决定先读取哪张表(驱动表),以及连接的顺序。
      • 重写查询:对条件进行一些等价转换,简化执行。
    • 输出:优化器最终生成一个执行计划。你可以通过EXPLAIN命令来查看这个计划。
  5. 执行器

    • 职责:根据执行计划,调用存储引擎的接口,逐步完成查询。
    • 详细过程
      1. 在执行前,会再次检查用户对目标表是否有操作权限(如果命中查询缓存,则会在返回缓存结果时校验权限)。
      2. 根据执行计划,打开表,调用存储引擎接口获取数据。

第二阶段:存储引擎层处理(数据存取)

  1. 存储引擎
    • 职责:负责数据的实际存储和读写。MySQL采用插件式架构,支持InnoDB、MyISAM等多种引擎(目前InnoDB是默认且绝对主流的引擎)。
    • 以InnoDB执行一个SELECT为例
      1. 执行器通过引擎接口,请求满足条件的第一行(例如,请求id=1的行)。
      2. InnoDB引擎首先检查缓冲池中是否已有所需数据页。如果有(缓存命中),则直接返回;如果没有(缓存未命中),则从磁盘加载对应的数据页到缓冲池,然后返回数据。
      3. 执行器获取第一行后,会继续调用引擎接口请求“下一行”,直到遍历完所有满足条件的行。
    • 以InnoDB执行一个UPDATE为例(更复杂,涉及事务):
      1. 执行器调用引擎接口,获取满足条件的行(过程同SELECT)。
      2. 执行器将待更新数据传给引擎。
      3. 引擎首先将旧数据写入Undo Log(用于回滚和MVCC)。
      4. 然后在缓冲池中更新数据行,并将更新操作记录到Redo Log Buffer中。
      5. 执行器提交事务时,Redo Log会按照一定策略刷盘(确保持久性),而数据页本身可能还在缓冲池中,等待后台线程异步刷回磁盘。这就是WAL(Write-Ahead Logging)技术。

第三阶段:结果返回

  1. 结果返回
    • 执行器将获取到的所有满足条件的行组织成结果集。
    • 如果是慢查询,记录会写入Slow Query Log
    • 最终,结果集通过网络协议返回给客户端

核心要点总结

  • 两阶段分工:服务层负责SQL处理与逻辑,存储引擎负责数据存取。这种设计提供了灵活性。
  • 关键优化点优化器选择的执行计划存储引擎的I/O效率(尤其是缓冲池命中率)是性能关键。
  • 更新操作的区别:更新操作会涉及事务日志(Redo Log, Undo Log),以保证ACID特性,流程比SELECT更复杂。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/2 3:58:08

小猫影视 - 影视播放器

链接:https://pan.quark.cn/s/6eb332dc88cb支持平台:#Windows #macOS #Linux #Android一款影视播放器,支持视频点播(VOD)和JavaScript扩展源。可以通过简单的操作快速找到并播放自己喜欢的影视内容。支持多种视频格式&…

作者头像 李华
网站建设 2026/5/29 19:48:42

哔哩下载姬DownKyi:专业B站视频管理工具深度体验

哔哩下载姬DownKyi:专业B站视频管理工具深度体验 【免费下载链接】downkyi 哔哩下载姬downkyi,哔哩哔哩网站视频下载工具,支持批量下载,支持8K、HDR、杜比视界,提供工具箱(音视频提取、去水印等&#xff09…

作者头像 李华
网站建设 2026/5/29 16:59:35

Shell脚本部署——8day

Shell脚本部署课程目标掌握shell脚本的思路完成shell脚本的编写课程实验shell脚本的思路shell脚本的编写课堂引入部署项目中,有很多都是固定的模式与内容,所有的东西都需要人工去操作的话,成本就比较高,也比较麻烦,能不…

作者头像 李华
网站建设 2026/6/1 1:48:47

AI 自动生成报表

1. AI 生成图表 向上汇报经常需要制作图表,如果没有顺手的工具,可能需要花费大量的时间消耗在报表的制作上。随着AI的迅猛发展,我们通过一个简单的对话来低成本实现报表的生成。 2. 使用到的工具 MCP 平台:https://www.modelscope…

作者头像 李华
网站建设 2026/6/3 6:54:11

Unity学习笔记(十二)碰撞中的刚体和碰撞器

碰撞产生的必要条件 两个物体都有碰撞器,至少有一个物体有刚体刚体1.它就是模拟力的作用2.Mass质量 默认为KG 质量越大 阻性越大3.Drag空气阻力 根据力移动对象时影响对象的空气阻力大小。影响移动,0表示没有空气阻力4.Use Gravity 是否受重力影响5.Angu…

作者头像 李华
网站建设 2026/6/3 10:57:17

微服务架构下的全方位测试策略

微服务架构的测试挑战与机遇随着企业数字化转型加速,微服务架构因其灵活性、可扩展性和技术异构性成为主流。据预测,到2025年,超70%的新建系统将采用此架构。然而,分布式系统带来的服务依赖复杂、部署频繁、故障隔离困难等挑战&am…

作者头像 李华