MySQL中SQL语句的执行流程(高频考点)

文章目录


前言

昨天跟大家讲了MySQL的基础架构(链接:MySQL的基础架构),今天讲一讲我们的高频面试题MySQL中SQL语句的执行流程。

建议看完 MySQL的基础架构 再来看这篇。


SQL语句的执行流程

SQL 语句分为查询语句与更新语句。更新语句就是增加、删除、修改。本文从这两种不同的语句讲述SQL语句的执行流程。

查询语句的执行流程

我们先来看看MySQL的基础架构(如下图),各司其职。

  • 连接器:用于身份认证与权限鉴定。
  • 分析器(解析器):用于词法分析与语句分析,用于判断 SQL 语句的准确性。
  • 优化器:用于优化 SQL 语句,MySQL 自带,为了让 SQL 语句执行时可以提高性能,但是注意优化器优化后的 SQL 语句并不是最佳的。
  • 执行器:执行 SQL 语句返回存储引擎返回的读写数据
  • 存储引擎:用于存储读写数据。

正如图所示,查询语句的执行流程如下

select * from students where name = '张三'

  1. 客户端通过连接器连接数据库。
  2. 分析器进行词法和语法分析,判断SQL语句是否准确。
  3. 先查询缓存,有则返回,无则继续第 4 步,得到结果后将数据存入缓存。(注意在MySQL8.0以后查询缓存功能已取消,以为实用性不大。)
  4. 优化器将SQL语句进一下的优化,达到性能优化。(注意MySQL的优化不一定是最佳,底层涉及索引的使用等等,不展开说)
  5. 执行器调用存储引擎的 API 接口执行SQL语句,最后返回名字等于'张三'的数据。

更新语句的执行流程

更新语句的前程跟查询的一样,不同的是多了日志模块的使用。MySQL 的 binglog,与存储引擎 Innodb 自带的 redo log。MySQL 5.5之后默认是使用 Innodb 当做存储引擎。

update students set name = '李四' where name = '张三'

  1. 数据库查询出 name = '张三' 的数据。
  2. 执行更新操作,记录在redo log 记为 prepare 状态。
  3. 将操作记录在 binglog 中。
  4. 将 redo log 的该记录改为 commit 状态。

问:为什么 redo log 有两种状态呢?

答:为了防止在修改中数据库崩溃的时候可以恢复数据

问:binglog 起到什么作用?

答:binglog 是归档日志。是MySQL自带的,而存储引擎 Innodb 自带的 redo log。redo log 是支持事务的,也可以根据它来恢复数据。


总结

查询语句与更新语句前面都是相同,只是更新语句需要加入日志模块,是为了能够恢复数据记录等等的作用,涉及到 Innodb 的redo log。这个是面试的高频考点,大家要多加熟悉。

有启发点个赞 🌹

预计下篇分享:MySQL 的存储引擎

本篇参考:JavaGuide

我是小辉,正在进行 Java 实习的 24 届应届毕业生。持续分享,包括但不限于技术文章。全网同名...

相关推荐
robin591111 分钟前
Linux-通过端口转发访问数据库
linux·数据库·adb
懒羊羊不懒@38 分钟前
【数据库 | 基础】DDL语句以及数据类型
数据库
泷羽Sec-静安39 分钟前
Less-9 GET-Blind-Time based-Single Quotes
服务器·前端·数据库·sql·web安全·less
李宥小哥1 小时前
结构型设计模式2
网络·数据库·设计模式
猫头虎1 小时前
永久免费白嫖多个域名,一键托管Cloudflare,免费申请SSL加密证书,轻松建站、搭建线路伪装
服务器·开发语言·网络·数据库·python·网络协议·ssl
真正的醒悟2 小时前
什么是安全设备组网
服务器·数据库·php
nvd112 小时前
使用Terraform创建私有Cloud SQL实例及连接测试
sql·云原生·terraform
小哈里2 小时前
【软考架构】2025H2系统架构设计师考试复习.jpg(软件架构、软件工程、数据库、Web开发、高项)
数据库·架构·系统架构·软件工程·后端开发
B站_计算机毕业设计之家2 小时前
深度学习:Yolo水果检测识别系统 深度学习算法 pyqt界面 训练集测试集 深度学习 数据库 大数据 (建议收藏)✅
数据库·人工智能·python·深度学习·算法·yolo·pyqt
赵文宇5 小时前
站在MySQL肩膀上快速入门PostgreSQL,开源社区最喜爱的关系数据库
mysql·postgresql