3、存储引擎模块
经过了连接处理和解析优化俩步骤后,实际上还是没有对实际的数据进行任何的处理,Mysql中,将对数据存储和提取的操作抽取到了一个叫存储引擎的模块中 。
在逻辑上,我们看到的是表的数据是一行行的形式,但实际物理层面上,表的数据如何存储、如何读取表的数据、这都是存储引擎需要负责的操作,Mysql中提供了不同的存储引擎,不同的存储引擎存储的数据结构可能不相同,采用的算法也可能不同 。
4、延伸
我们常在一些教学视频或者专业文章中看到MySQL Server层和存储引擎模块的概念,它们具体的含义如下:
为了管理方便,将连接处理/管理、查询缓存、语法解析、查询优化等不涉及到真实数据存取的功能划分为Mysql Server层的功能 。
把涉及到真实数据存取的功能划分为存储引擎模块的功能,Mysql Server层通过各个存储引擎提供的API进行访问响应的存储引擎,Mysql通过查询优化生成了执行计划后,通过调用存储引擎提供的API获取到对应的数据返回给客户端即可 。
三、MySQL流程常见面试题
3.1、数据库语句的执行顺序
(一): 执行顺序
from -> on -> join -> where -> group by -> having -> count(聚合函数) -> select -> distinct -> order by -> limit
(二): 执行步骤解释:
(1)、from: 表示数据的来源
(2)、on: 表示数据的关联表,执行完后生成一个临时表t1,提供给下一步的操作使用
(3)、join: 将join表的数据补充到on执行完成的临时表t1中,如: left join则将坐标剩余的数据添加到临时表t1中,如果join超过3个,则重复on...join之间的步骤 。
(4)、where: 根据携带的条件,从临时表中筛选出符合条件的数据,并生成临时表t2 。
(5)、groub by: 根据携带的条件,将临时表t2进行相应的数据分组,并形成临时表t3,如果语句包含了group by则它后面的字段必须出现在select中或者出现在聚合函数中,否则会报SQL语法错误 。
(6)、having: 筛选分组后临时表t3的数据,得到临时表t4 。
(7)、count等聚合函数: 对临时表进行指定字段的聚合函数操作,形成临时表t5 。
(8)、select: 从临时表筛选出需要返回的数据,形成临时表t6 。
(9)、distinct: 对临时表t6进行指定的去重筛选,形成临时表t7 。
(10)、order by: 对临时表t7排序,形成临时表t8 。
(11)、limit: 筛选返回的数据条数
想要了解更多的执行过程的问题,可以查看之前专门解析执行过程的文章: 你真的懂使用Group by?
四、系列文章 1、《从0到1-全面深刻理解MySQL系列》- 最详细的MySQL安装流程(Window版)
2、《从0到1-全面深刻理解MySQL系列》- 最详细的MySQL安装流程(linux环境)
3、《从0到1-全面深刻理解MySQL系列》- 忘记MySQL登录密码时如何连接数据库
五、小结
从上文我们可以知道,MySQL服务端又划分为: MySQL Server层和存储引擎层 。MySQL Server层主要负责进行客户端连接、语法解析、语法优化等操作,存储引擎层负责对实际数据的存取操作 。
一条SQL语句完整的解析需要经历以下步骤: 客户端和服务端请求处理 -》查询缓存 -》语法解析 -》查询优化 -》存储引擎对数据存取 -》 返回处理结果
推荐阅读
- SQL 查询执行顺序
- 新手必须掌握的linux命令
- 为什么阿里巴巴强制不要在 foreach 里执行删除操作
- 人救蛇被蛇咬的故事?一个女子救了一条蛇
- 负能量|制度是绝情的,管理是无情的,执行是合情的
- 一条一般的黄金项链多少钱?一条金项链最便宜多少钱
- 执行update语句,用没用到索引,区别大吗?
- 一条白金项链多少钱
- 一条925银项链多少钱
- 原来一条select语句在MySQL是这样执行的
