一条sql的执行流程

文章地址

https://blog.csdn.net/qq_43618881/article/details/118657040

连接器

请求先走到连接器,与客户端建立连接、获取权限、维持和管理连接

mysql缓存池

如果要查找的数据直接在mysql缓存池里面就直接返回数据

分析器

请求已经建立了连接,现在需要对请求的语法进行分析,生成一个语法树

如果语法不对在这里直接报错

优化器

在这里对你写的sql进行优化

比如说表连接查询的时候小表 left join 大表

最后生成执行计划

也就是explain出来的结果

执行器

随后将执行计划交给执行引擎进行操作,比如innodb存储引擎,mysql的存储引擎支持插件化

执行引擎

INNODB存储引擎,会对执行计划进行处理

INNODB缓存池

在INNODB里面也有缓存池,里面会有各种各样的脏页

INNODB流程

select

首先查看数据是否在缓存池当中,如果是的话直接对数据进行返回

如果不在缓存池当中从磁盘读取root 的下面的非聚簇索引页,根据slot,进行二分查找,最后按照偏移量找到对应的页表,如果下一个节点还是非聚簇节点,就重复这个步骤,如果不是非聚簇节点,就查找真正的数据

slot槽

slot槽在页头中,每个页都是有的

slot 记录了每一个页的偏移量,是一个数组的结构,可以支持二分查找

先从 B+Tree 的根开始,逐层检索,直到找到叶子节点,也就是找到对应的数据页为止,然后将数据页加载到内存中,页目录中的槽(slot)采用二分查找的方式先找到一个粗略的记录分组,最后在分组中通过链表遍历的方式查找到记录。

insert

先记录undo日志

修改buffer pool中的数据

使用double write buffer 两次写进行持久化

写redo log

redo log 根据设置的频率进行刷盘

记录binlog

相关推荐
2301_781571422 小时前
Golang格式化输出占位符都有什么_Golang fmt占位符教程【通俗】
jvm·数据库·python
养肥胖虎2 小时前
RAG学习笔记(3):区分数据库检索与RAG的使用场景
数据库·ai·rag
_ku_ku_3 小时前
数据库系统原理 · 数据库应用开发 · 自学总结
数据库
No8g攻城狮3 小时前
【人大金仓】wsl2+ubuntu22.04安装人大金仓数据库V9
java·数据库·spring boot·非关系型数据库
山峰哥3 小时前
SQL慢查询调优实战:从全表扫描到索引覆盖的完整复盘
前端·数据库·sql·性能优化
代码中介商4 小时前
Redis入门:5大数据类型全解析
数据库·redis·缓存
渣渣盟4 小时前
数据库设计范式详解(纯小白版)
数据库·oracle·软考·数据库工程师
夜雪闻竹6 小时前
Cursor 对话导入:解析 SQLite 里的宝藏
数据库·sqlite·ai编程
hhb_6186 小时前
PL/SQL核心技术难点梳理与实战应用案例解析
数据库·sql
m0_470857646 小时前
PHP怎么实现工厂模式_Factory模式编写指南【指南】
jvm·数据库·python