浅谈mysql体系结构,这下总该懂了吧。

今天我们来聊一个简单的话题,mysql体系结构,实际上mysql是什么,大家都应该已经很了解,但对于mysql的底层结构,网上有一大堆的教程,说的似是而非,要么并不完全,总有种隔靴搔痒的感觉,今天,叶子就带大家好好梳理一下。

废话不多说,直接上图。

在这里插入图片描述

一、连接层(Client Connectors)

连接层又称为客户端连接器(Client Connectors):提供与MySQL服务器建立的支持。
目前几乎支持所有主流的服务端编程技术,主要完成一些类似于连接处理、授权认证、及相关的安全方案。

在该层上引入了线程池的概念,为通过认证安全接入的客户端提供线程。同样在该层上可以实现基于SSL的安全连接,并且在这里服务器也会为接入的客户验证他所具备的权限。
注意:连接用户权限修改后,不会立即生效,就是因为在这里将用户认证后的权限信息保存了下来,需要用户断开并重新连接,重新进行校验,修改后的权限才会生效。

二、服务层(MySQL Server)

服务层是MySQL Server的核心,主要包含系统管理和控制工具、SQL接口、解析器、查询优化器。

实际上,连接层中的连接认证,校验流程,也可以归属在服务层中。
数据库连接成功后,在服务层完成大多数核心功能,如Sql接口,查询缓存,Sql分析和优化,以及一些内置函数的执行。
它的主要流程是这样的:

第一步,查看当前查询是否存在缓存,有则直接返回,没有则进行服务器解析,并生成对应的内部解析树。
第二步,完成相应的优化,确定表的查询顺序,是否使用索引
第三步,生成对应的操作。

三、存储引擎层(Pluggable Storage Engines)

存储引擎负责MySQL中数据的存储与提取,与底层系统文件进行交互。MySQL存储引擎是插件式的,不同的存储引擎具备不同的功能,可以根据自己的需要进行选择,最常见的是MyISAM和InnoDB。

注意:数据库的索引就是在引擎层实现的。

四、系统文件层(File System)

文件层负责将数据库的数据和日志存储在文件系统之上,并完成与存储引擎的交互,是文件的物理存储层。主要包含日志文件(redolog,undo.log),数据文件,索引文件,二进制日志,错误日志,配置文件,pid 文件,socket 文件等。
MySQL运行机制

在这里插入图片描述

建立连接(Connectors&Connection Pool),通过客户端/服务器通信协议与MySQL建立连接。MySQL 客户端与服务端的通信方式是 “ 半双工通信 ”。

查询缓存(Cache&Buffer),如上图所示,存在则直接返回,不存在则进行查询,不过需要注意的是,它默认是关闭的,并且,在8.0以后版本,不再支持查询缓存,因为它需要SQL完全相同才能匹配缓存,命中率极低,如果表进行DDL或者DML操作,缓存就会被清空。

解析器(Parser),将客户端发送的SQL进行语法解析,生成"解析树"。预处理器根据一些MySQL规则进一步检查“解析树”是否合法,例如这里将检查数据表和数据列是否存在,还会解析名字和别名,看看它们是否有歧义,最后生成新的“解析树”。

优化器(Optimizer),根据“解析树”生成最优的执行计划。MySQL使用很多优化策略生成最优的执行计划,分为两类:静态优化(编译时优化)、动态优化(运行时优化)。

查询执行引擎负责执行 SQL 语句,得到查询结果并返回给客户端。若开启用查询缓存,这时会将SQL 语句和结果完整地保存到查询缓存(Cache&Buffer)中,以后如果有相同的 SQL 语句执行则直接返回结果。

有兴趣的小伙伴可以关注我的公众号,“一叶知求”,更多技术分享,欢迎大家来玩!

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值