今日学习:一条SQL语句到执行经历的步骤
SQL 执行流程
在SQL执行过程中,需要经历SQL引擎、存储引擎、以及事务引擎等模块。而其中SQL引擎又分为Parser、Optimizer、Executor几个部分。
连接器:连接器负责跟客户端建立连接、获取权限、维持和管理连接
查询缓存:(高版本MySQL已经默认不用了)
分析器:对要执行的SQL语句进行解析 词法分析:提取关键字,比如 select,提出查询的表,提出字段名,提出查询条件等
语法分析:把提取出的Token转换为抽象语法树后进行检验。主要就是判断你输入的 sql 是否正确,是否符合 MySQL 的语法
优化器:查询优化器会选择一条最优查询路径
执行器:先校验该用户有没有权限,如果没有权限,就会返回错误,如果有权限,就会去调用引擎的接口,返回接口执行的结果。
执行引擎:存储引擎是对底层物理数据执行实际操作的组件
buffer pool:缓存MySQL一些页数据,提高MySQL的响应速
-
触发脏页的刷新
-
当 redo log 日志满了的情况下,会主动触发脏页刷新到磁盘;
-
Buffer Pool 空间不足时,需要将一部分数据页淘汰掉,如果淘汰的是脏页,需要先将脏页同步到磁盘;
-
MySQL 认为空闲时,后台线程回定期将适量的脏页刷入到磁盘;
-
MySQL 正常关闭之前,会把所有的脏页刷入到磁盘
-
-
四大隔离级别
- 读未提交:有脏读现象
- 读已提交:不可重复读
- 可重复读:有幻读现象,用next-key(行锁+gap key)解决
- 串行化:效率低下
存储引擎
存储引擎负责了数据的底层存储、管理和访问工作 MySQL的InnoDB为例:
- Buffer Pool:存储引擎位于内存中的重要结构,用于缓存数据,减少磁盘IO的开销。
- Page:数据存储的最基本单位,一般为16KB。
- B+u Tree:InnoDB中最常用的索引结构。