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

简单说说mysql中一条读sql是如何执行的

在server层

会先【查询缓存】,

如果有,则直接返回

如果没有缓存,则会在分析器进行词法和语法的分析,如果存在语法错误,会在这一层进行报错

如果语法和词法都没有问题,则会在优化器进行优化,优化器主要是进行索引选择和多表关联的执行顺序选择。

在优化完成后,则走到执行器,执行器会先判断当前账号有没有表权限,如果没有,则会进行报错

如果有,则走存储引擎层进行查询。

在存储引擎层(已innodb为例,在RR隔离级别之下,同时认为是事务下的第一条查询)

如果是首次查询,会根据当前事务id生成一个read view

如果非首次查询,则会使用之前的一个read view

然后会根据当前的查询条件,选择的索引,以及选择的表关联顺序去查询数据

在查询到数据后,会根据read view 规则判断每一条数据是否可见

如果可见,则直接返回

如果不可见,会根据roll_pointer 去undo log 中查找其他版本的记录,

接着会将undo log 中的数据去对比read view 规则,直至查询到可见的数据

TIP:关于read view 请参考另一篇博文:简单说说mysql的mvcc-CSDN博客


http://www.kler.cn/a/350616.html

相关文章:

  • 人工智能之数学基础:线性代数中的线性相关和线性无关
  • Android系统开发(八):从麦克风到扬声器,音频HAL框架的奇妙之旅
  • 密钥轮换时,老数据该如何处理
  • 港湾周评|万科的多重压力
  • 放大芯片参数阅读
  • Spring 核心技术解析【纯干货版】- Ⅶ:Spring 切面编程模块 Spring-Instrument 模块精讲
  • 2023年12月中国电子学会青少年软件编程(Python)等级考试试卷(一级)答案 + 解析
  • PowerShell中conda activate指令无效的问题
  • CentOS硬解码+ffmpeg+Nvidia硬解码
  • 探索人工智能在数学教育上的应用——使用大规模语言模型解决数学问题的潜力和挑战
  • 学习 Python 的途径
  • 基于深度学习的车辆车型检测识别系统(YOLOV5)
  • 太速科技-456-FMCJ456-14bit 2通道3/2.6/2GS/s ADC +16bit 2通道12.6GS/s DAC FMC AD/DA子卡
  • WSL2配置代理解决git网络不通畅的问题
  • React Native学习计划
  • STM32—WDG看门狗
  • Palo Alto Networks Expedition 未授权SQL注入漏洞复现(CVE-2024-9465)
  • 基于Spring Boot的大创项目成本控制系统
  • 使用rabbitmq-operator在k8s集群上部署rabbitmq实例
  • js高级-理解call()的原理
  • Java基础15-Java高级
  • Leetcode—1188. 设计有限阻塞队列【中等】(多线程)
  • 从零开始:使用 Flask 或 Django 构建 RESTful API
  • 踩坑日记:线上接口超时问题排查
  • 程序员如何使用AI工具进行设计开发?
  • ES操作指南