当前位置: 首页 > news >正文

一条sql语句在mysql中的执行流程(Mysql基础架构)

mysql基础架构

MySQL 主要分为 Server 层存储引擎层
Server 层:主要包括 连接器、查询缓存、分析器、优化器、执行器等,所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图,函数等,还有一个通用的日志模块 binglog 日志模块。
存储引擎: 主要负责数据的存储和读取。
名词解释:
连接器: 身份认证和权限相关(登录 MySQL 的时候)。
查询缓存: 执行查询语句的时候,会先查询缓存(MySQL 8.0 版本后移除,因为这个功能不太实用)。
分析器: 没有命中缓存的话,SQL 语句就会经过分析器,分析器主要分析你的 SQL 语句要干嘛,再检查你的 SQL 语句语法是否正确。
优化器: 按照 MySQL 认为最优的方案去执行。
执行器: 执行语句,然后从存储引擎返回数据。

查询sql语句的执行流程:

  1. 1、先检查该语句是否有权限,如果没有权限,直接返回错误信息。如果有权限,在 MySQL8.0 版本以前,会先查询缓存,以这条 sql 语句为 key 在内存中查询是否有结果,如果有直接缓存,如果没有,执行下一步。)
  2. 2、通过分析器进行分析,先词法分析,提取关键字,提出查询的表,提出字段名,提出查询条件等等;再语法分析,主要判断你输入的 sql 是否正确,是否符合 MySQL 的语法。
  3. 3、优化器进行确定执行方案。
  4. 4、还要进行权限校验,如果没有权限就会返回错误信息,如果有权限就会调用数据库引擎接口,返回引擎的执行结果。

更新sql语句的执行流程:

基本上会沿查询的流程走,但执行更新的时候要记录日志,此时日志模块有:MySQL 自带的日志模块式 binlog(归档日志) ,所有的存储引擎都可以使用;InnoDB 引擎还自带了一个日志模块 redo log(重做日志)。
InnoDB 模式下来更新sql语句的执行流程如下:
  1. 先查询到张三这一条数据,如果有缓存,也是会用到缓存。
  2. 然后拿到查询的语句,进行更新,然后调用引擎 API 接口,写入这一行数据,InnoDB 引擎把数据保存在内存中,同时记录 redo log,此时 redo log 进入 prepare 状态,然后告诉执行器,执行完成了,随时可以提交。
  3. 执行器收到通知后记录 binlog,然后调用引擎接口,提交 redo log 为提交状态。
  4. 更新完成。

相关文章:

  • 【Unity3D】摄像机适配场景以及Canvas适配
  • 使用LangChain开发智能问答系统
  • c#难点整理
  • 【模板】计算几何入门
  • Vue 表单输入绑定,双向绑定
  • 基于 intellij-platform-plugin-template 开发IDEA插件注意事项
  • form 表单内容序列化成一个字符串
  • 大模型架构记录2 【综述-相关代码】
  • 数据服务赋能数据治理:从“One Service”到QuickAPI的演进
  • redis操作
  • 【搜索】dfs(回溯、剪枝、记忆化)
  • 【C++】类和对象(二)默认成员函数之构造函数、析构函数
  • Springboot集成Debezium监听postgresql变更
  • CQL学习
  • 游戏引擎学习第177天
  • 996引擎-接口测试:背包
  • pnpm 报错 Error: Cannot find matching keyid 解决
  • Mybatis的基础操作——03
  • 西交建筑学本科秋天毕业想转码,自学了Python+408,华为OD社招还是考研更香?
  • 第十四章:模板实例化_《C++ Templates》notes
  • 稳就业稳经济五方面若干举措将成熟一项出台一项
  • 深一度|“凑合过”的利物浦,英超第二冠只求性价比
  • 人民日报:应对外贸行业风险挑战,稳企业就是稳就业
  • 印度媒体称印巴在克什米尔再次交火
  • 远程控制、窃密、挖矿!我国境内捕获“银狐”木马病毒变种
  • “2025上海西九文化周”启动,香港顶尖文艺6月齐聚申城