当前位置: 首页 > 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
  • 新加坡国会选举投票抽样结果公布,执政党已获超半数议席
  • 国家能源局:鼓励各地探索深远海、沙戈荒等可再生能源制氢场景
  • 5月1日,多位省级党委书记调研旅游市场、假期安全等情况
  • 魔都眼|石库门里看车展,五一来张园体验城市“漫时光”
  • 净海护渔,中国海警局直属第一局开展伏季休渔普法宣传活动
  • 两部门发布“五一”假期全国森林草原火险形势预测