当前位置: 首页 > 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. 更新完成。
http://www.dtcms.com/a/84038.html

相关文章:

  • 【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
  • 如何编写SLURM系统的GRES资源插件
  • Lustre 语言的 Rust 生成相关的工作
  • Autosar OS配置-Timing Protection配置及实现--基于ETAS工具
  • 题单:精挑细选
  • 生物化学笔记:医学免疫学原理02 抗原概念+免疫应答+抗原的分类
  • SQL语言——MySQL
  • MuJoCo 仿真 Panda 机械臂!末端位置实时追踪 + 可视化(含缩放交互)
  • 系统架构书单推荐(一)领域驱动设计与面向对象
  • pycharm快捷键汇总(持续更新)
  • 神聖的綫性代數速成例題12. 齊次方程組零解充要條件、其齊次方程組非零解、 齊次方程組基礎解系