5分钟让你了解一条Sql是如何执行的
一条Sql是怎么执行的
1、数据库连接池:首先要通过数据库连接池连接mysql,SQL语句的请求在MySQL中是由一个个的线程去处理的。
2、Sql接口:MySQL 中处理请求的线程在获取到请求以后获取 SQL 语句去交给 SQL 接口去处理。
3、查询解析器:将SQL接口传递过来的 SQL 语句进行解析,翻译成 MySQL 自己能认识的语言。
4、MySQL查询优化器:MySQ会帮我去使用他自己认为的最好的方式去优化这条SQL语句,并生成一条条的执行计划,MySQL 会依据成本最小原则来选择使用对应的索引,这里的成本主要包括两个方面, IO 成本和 CPU 成本。
5、存储引擎:查询优化器会调用存储引擎的接口,去执行 SQL,也就是说真正执行 SQL 的动作是在存储引擎中完成的。
1)、Buffer Pool(缓冲池):Buffer Pool (缓冲池)是 InnoDB 存储引擎中非常重要的内存结构第一次在查询的时候会将查询的结果存到 Buffer Pool 中,这样后面再有请求的时候就会先从缓冲池中去查询,如果没有再去磁盘中查找,然后在放到 Buffer Pool 中。
2)、undo 日志文件:记录数据被修改前的样子
3)、redo 日志文件:记录数据被修改后的样子
4)、bin log 日志文件:记录整个操作过程
总结
1、Buffer Pool 是 MySQL 的一个非常重要的组件,因为针对数据库的增删改操作都是在 Buffer Pool 中完成的
2、Undo log 记录的是数据操作前的样子
3、redo log 记录的是数据被操作后的样子(redo log 是 Innodb 存储引擎特有)
4、bin log 记录的是整个操作记录(这个对于主从复制具有非常重要的意义)
从准备更新一条数据到事务的提交的流程描述
1、首先执行器根据 MySQL 的执行计划来查询数据,先是从缓存池中查询数据,如果没有就会去数据库中查询,如果查询到了就将其放到缓存池中
2、在数据被缓存到缓存池的同时,会写入 undo log 日志文件
3、更新的动作是在 BufferPool 中完成的,同时会将更新后的数据添加到 redo log buffer 中
4、完成以后就可以提交事务,在提交的同时会做以下三件事
5、(第一件事)将redo log buffer中的数据刷入到 redo log 文件中
6、(第二件事)将本次操作记录写入到 bin log文件中
7、(第三件事)将 bin log 文件名字和更新内容在 bin log 中的位置记录到redo log中,同时在 redo log 最后添加 commit 标记
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程