【MySQL笔记 】 1. 面试官问我了解SQL的执行过程吗?
系列文章目录
提示:所有文章的目录
前言
大家好,我是小郭,通过学习MySQL输出学习笔记,在系统的学习MySQL之前,我们需要对SQL的执行过程有一个大概的了解。
提示:以下是本篇文章正文内容
一、SQL执行流程是什么?
SQL执行流程
二、MySQL的框架有几个组件, 各是什么作用?
1.连接器
职责:连接器负责跟客户端建立连接、获取权限、维持和管理连接
root@30aa56390615:/# mysql -h 127.0.0.1 -uroot -p123456
- 通过TCP握手之后,认证身份。
- 建立连接的过程很繁琐,使用长连接来减少创建。长时间下内存占用太大,会被强行kill。
- 通过执行 mysql_reset_connection 来重新初始化连接资源
2.查询缓存
职责:查询缓存。由于版本不同,在5.7版本和8.0版本有着明显的差别。 5.7版本下通过SQL_CACHE来看缓存
select SQL_CACHE * from yy_passenger_coupon;
而8.0之后,官方就废弃的了缓存模块
3.分析器
职责:
- 语法分析,内建解析树,按照from,join,on,where,group by等顺序。
- 出现异常需要关注use near后的内容。
- 也是在分析器阶段,进行表结构的判断。
4.优化器
职责:
- 确认索引(计算代价最小索引) 确认表的连接顺序
- 知道你要做什么
5.执行器
职责:执行优化器提供的要做的事,但在执行之前会先判断下权限
三、update的更新过程
1. 将值写入新行,更新到内存
2. 利用Redo Log和Bin Log配合进行二次提交,保证数据的一致性
1.了解Redo Log、Bin Log、Undo Log的作用
Redo Log:是Innodb特有的,binlog 是 MySQL 的 Server 层实现的。
问题:在update更新过程中,看到了先写入Redo Log,再写入Bin log,是否可以不要Redo Log?
答案是不能,因为 Redo Log只有InnoDB才有, BinLog 是采用追加的形式,而Redo Log是重复利用,不具备归档的能力。 他们两个来完成两阶段提交,保证数据的一致性
总结
我们总结一下MySQl的执行过程:
- 通过连接器,建立连接校验权限,通过连接器管理和维持连接,避免重复连接。
- 查询缓存,减少查询成本。
- 通过分析器,建立语法分析,确定执行顺序,进行表结构校验,提前返回错误信息。
- 通过优化器,确认最低代价索引,知道要做什么
- 通过执行器,在执行最终任务,依次轮询向下获取满足条件的数据的第一条数据。
转载自:https://juejin.cn/post/6978449406597005343