SQL语句的执行流程

MySQL的执行流程包括建立连接、查询与更新操作。其逻辑架构分为客户层、服务层和存储层,涉及连接管理、权限验证、语法分析、优化器和执行器等步骤。存储层采用插件式架构,如InnoDB引擎支持事务和崩溃恢复。更新操作如Update使用Write-AheadLogging,确保数据安全。两阶段提交保证了重做日志和归档日志的一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MYSQL的逻辑架构

3 层架构

架构

  • 客户层:负责的服务主要有:
    • 管理连接:PDBC+JDBC+ODBC
    • 用户登录:User+Password
    • 权限验证:privileges
  • 服务层:词法分析+语法分析优化器+ 执行器
    • 负责实现跨存储引擎的功能
    • 比如存储过程procedure, 触发器trigger, 视图view
  • 存储层:插件式的架构,支持InnoDB,Memory

建立连接

  • 尽量使用长连接
  • 但也不能一直保持连接。
    • 执行过程中临时使用的内存管理在连接对象里面
    • 长连接会累积这些内存占用
  • 定期断开长连接
  • mysql_reset_connection可以重新初始化连接
    • 开销更小

Select

Select * from t where id = 1;

  1. 词法分析、语法分析
    • 识别token
      关键字:Select
      操作符:*
      关键字:from
      标识符:t
      关键字:where
      标识符:id
      操作符:=
      常量:1
    • 语法分析:
      根据语法规则,判断这个语句是否满足MySQL语法
      语法分析树
  2. 优化器:决定选择使用哪一个方案。
    • 在表里面有多个索引的时候,决定使用哪个索引;
    • 在一个语句有多表连接的时候,决定各个表的连接顺序。
  3. 执行器:开始执行语句
    • 权限验证
    • 打开表,根据表的引擎定义,使用对应的接口
  4. 到达存储引擎
    • 调用InnoDB引擎接口取到t表的第一行,判断id是否为10
    • 取下一行,重复相同的判断逻辑,知道取到这个表的末行
    • 将目标的记录集作为结果集返回给客户端

Update

Write-Ahead Logging :先写日志,再写磁盘。
涉及两个重要的日志模块。

  • 重做日志 redo-log
    • InnoDB引擎特有的日志,以插件形式引入
    • 物理日志,记录“在某个数据页上做了什么修改”
    • 在适当的时候,将操作记录更新到磁盘里面

有了redo-log,即使数据库异常重启,
之前提交的记录也不会丢失,这个特性叫做crash-safe

  • 归档日志 bin-log
    • Server层实现,只能用于归档。
    • 逻辑日志,记录语句的原始逻辑
    • 追加写入,不会覆盖以前的日志

执行流程
两阶段提交: 两阶段指的是重做日志的prepare👉commit

为什么要有“两阶段提交”?

  • 当重做日志写完时,归档日志一定也写完了,保证一致
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值