持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第10天,点击查看活动详情
前言
上篇我们学习了MySQL中的逻辑架构。有兴趣的小伙伴可以阅读(# MySQL学习-逻辑架构(二))。
下面我们继续学习MySQL中的逻辑架构。
逻辑架构
引擎层
插件式存储引擎层,真正的负责了MySQL中数据的存储和提取,对物理服务器级别维护的底层数据执行操作,服务器通过API与存储引擎进行通信。不同的存储引擎具有的功能不同,这样我们可以根据自己的实际需要进行选取。
存储层
所有的数据,数据库、表的定义,表的每一行的内容,索引,都是存在文件系统上,以文件的方式存在的,并完成与存储引擎的交互。当然有些存储引擎比如InnoDB,也支持不使用文件系统直接管理裸设备,但现代文件系统的实现使得这样做没有必要。在文件系统中,可以使用本地磁盘,可以使用DAS、NAS、SAN等各种存储系统。
总结: MySQL的逻辑架构简化为三层结构:
- 连接层:客户端与服务器端建立连接,客户端发送SQL至服务器端。
- SQL层(服务层):对SQL语句进行查询处理,与数据库文件的存储方式无关。
- 存储引擎层:与数据库文件打交道,负责数据的存储和读取。
MySQL中的SQL执行流程
当客户端执行查询语句时,首先需要先连接上MySQL服务器,然后通过通信协议传输SQL语句到MySQL服务器上。在服务器上的执行流程如下:
- 首先查询缓存,如果缓存中有这条SQL语句,那么会直接返回结果给客户端,如果没有这条SQL语句,就会进入解析器阶段。
- 在解析器中对SQL进行语法分析,语义分析。经过分析后,会生成一个语法树。
- 然后进入到优化阶段,这里会确定SQL语句的执行路径。
- 有了执行路径计划后,就会执行计划,从存储引擎获取数据返回给客户端。
总结流程:SQL语句->查询缓存->解析器->优化器->执行器。
今天先学习到这里,明天详细学习SQL执行流程。