巅峰战队|详解一条查询select语句和更新update语句的执行流程
- 前言
- 一条select语句的执行流程
- 建立连接
- 查询缓存
- 解析器和预处理器
- 词法解析和语法解析(Parser)
- 预处理器(Preprocessor)
- 查询优化器(Query Optimizer)
- 优化器可以做哪些优化
- 优化器并不是万能的
- 优化器如何得到查询计划
- 存储引擎查询
- 返回结果
- 一条update语句的执行流程
- Buffer Pool
- redo log
- Write-Ahead Logging(WAL)
- redo log是如何刷盘的
- bin log
- bin log和redo log的区别
- update语句的执行流程
- 两阶段提交
- 假如不采用两阶段提交法
- 宕机后的数据恢复规则
- 总结
前面几篇MySQL系列的文章介绍了索引 , 事务和锁相关知识 , 那么今天就让我们来看看当我们执行一条select语句和一条update语句的时候,MySQL要经过哪些步骤 , 才能返回我们想要的数据 。
一条select语句的执行流程MySQL从大方向来说 , 可以分为 Server 层和存储引擎层 。 而Server层包括连接器、查询缓存、解析器、预处理器、优化器、执行器等 , 最后Server层再通过API接口形式调用对应的存储引擎层提供的接口 。 如下图所示(图片来源于《高性能MySQL》):
在这里插入图片描述
根据流程图 , 一条select查询大致经过以下六个步骤:1、客户端发起一个请求时 , 首先会建立一个连接2、服务端会检查缓存 , 如果命中则直接返回 , 否则继续之后后面步骤3、服务器端根据收到的sql语句进行解析 , 然后对其进行词法分析 , 语法分析以及预处理4、由优化器生成执行计划5、调用存储引擎层API来执行查询6、返回查询到的结果
查询流程也可以通过如下图表示(图片来源于丁奇MySQL45将):
在这里插入图片描述
建立连接第一步建立连接 , 这个很容易理解 , 需要特别指出的是MySQL服务端和客户端的通信方式采用的是半双工协议 。
通信方式主要可以分为三种:单工 , 半双工 , 全双工 , 如下图:
在这里插入图片描述
- 单工:通信的时候 , 数据只能单向传输 。 比如说遥控器 , 我们只能用遥控器来控制电视机 , 而不能用电视机来控制遥控器 。
- 半双工:通信的时候 , 数据可以双向传输 , 但是同一时间只能有一台服务器在发送数据 , 当A给B发送数据的时候 , 那么B就不能给A发送数据 , 必须等到A发送结束之后 , B才能给A发送数据 。 比如说对讲机 。
- 全双工:通信的时候 , 数据可以双向传输 , 并且可以同时传输 。 比如说我们打电话或者用通信软件进行语音和视频通话等 。
MySQL单次传输数据包的大小可以通过参数max_allowed_packet控制,默认大小为4MB
SHOW VARIABLES LIKE 'max_allowed_packet';
- 大河客户端|布局战队,导师各有妙招,《2020中国好声音》收视率蝉联第一
- 周到|“好声音”蝉联省级卫视综艺节目收视第一,首迎抢位战导师布局战队各有妙招
- 综艺|靠师兄“上位”,出道即巅峰,她光环加身却依旧是糊咖
- 王者荣耀|王者重开机制揭秘:钻石段位以上必看,五战士,四辅助可重开,巅峰赛不能
- 杜兰特|83投60中!比巅峰杜兰特还强,季后赛最强球星出现了
- 青年|射手梯度排名更新,又一无解T0诞生,张大仙我愿称他为射手巅峰
- 通天战队|A股最励志闻泰科技!给华为小米打工到半导体巨头,半年赚17亿
- |《街舞3》火舞台battle开启 钟汉良战队团魂之力势不可挡
- |《这!就是街舞》第三季火舞台热力喷发,队长领衔齐舞大秀燃炸战队之魂
- 巅峰战队|ConcurrentHashMap的部分源码分析