SQL语句在MySQL内部的执行流程是什么?

一、SQL查询语句是如何执行的?

平时在工作中,都是用框架去执行一条SQL语句,那有没有想过一条SQL在MySQL内部到底经历了哪些流程呢?

首先我们来看一张MySQL的基本架构示意图:

MySQL架构示意图

Server 层包括连接器、查询缓存、分析器、优化器、执行器等,涵盖 MySQL 的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。
而存储引擎层负责数据的存储和提取。其架构模式是插件式的,支持 InnoDB、MyISAM、Memory 等多个存储引擎。
现在最常用的存储引擎是 InnoDB,它从 MySQL5.5.5 版本开始成为了默认存储引擎。

二、SQL更新语句是如何执行的?

先创建一张表:

mysql> create table T(ID int primary key, c int); //表的创建语句

接下来从一个表的一条更新语句看看整个流程是怎么样的:

mysql> update T set c=c+1 where ID=2;  //执行一条update语句

(先更新数据还是先写日志?)

update语句执行流程

更新流程涉及两个重要的日志模块:redo log(重做日志)和 binlog(归档日志)

对数据文件的物理更改,保证总是先写日志,再更新数据,也就是所谓的WAL,即在持久化数据文件前,保证之前的redo log已经写到磁盘。
WAL即Write-Ahead Logging,在对数据页进行修改时, 通过将"修改了什么"这个操作记录在日志中, 而不必马上将更改内容刷新到磁盘上, 从而将随机写转换为顺序写,,提高了性能。【脏页的概念】
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值