更多优质内容
请关注公众号

Mysql的分层架构-张柏沛IT博客

正文内容

Mysql的分层架构

栏目:数据库 系列: 发布时间:2020-11-02 11:13 浏览量:2040

很多人理解Mysql是把它看成是一个放数据的容器,其实mysql不仅仅是容器,它应该是一个应用,是一个程序。

Mysql整体分为3层:客户端层,服务层和存储引擎层。存储引擎层才是一个容器。



客户端:一般我们想给mysqlsql命令就需要有一个客户端连接mysql服务,建立了连接之后才能发请求。这个客户端有很多种,比如NavicatPHPmyadmin或者是最原始的mysql小黑盒cmd

服务层:服务层中包含很多组件如连接器,缓存区,词法分析器,优化器,执行器。

A.连接器:你可以把它理解为是一个连接池,存储和管理着多个连接。除此之外还负责校验权限,因为我们知道不是所有用户都有全部权限的,root用户是所有权限都有,而有些用户可能只有查的权限没有读的权限。
一个用户的权限是放在mysql库的user表中的。当连接建立之后,mysql会查询这个用户在user表中的权限,并将该用户在user表中的行存储在一个叫做“连接管理对象”中。用户每次发送sql命令过来的时候,都会在这个连接管理对象中查询用户有没权限执行它发的sql。

B.缓存区:当一个用户发送一条查询的sql,mysql不会立刻执行这条sql,而是先查缓存。这个缓存是一个key-value的结构。Key是sql语句,value就是sql语句查询的结果集。
但是mysql的缓存很少会被用到,它只适用于那种几乎不怎么写入数据的场景。Mysql的缓存默认是关闭的。在5.7版本之后,缓存区已被移除。


C.词法分析器:当mysql没有走缓存的话,就会进入词法分析器。它的作用是分析当前语句是查的操作还是增删改的操作,以及有没有语法错误,以及where,order by,group by等关键字。

D.优化器:优化器顾名思义就是用来优化查询的sql的。比如,当你的sql的where中出现了多个索引字段,优化器会选择使用其中效率最高的索引进行查询或排序(因为执行一条sql是不可能走多棵B+树,只会走一棵树)。又比如多表联查的时候决定是先查A表还是B表。

E.执行器:执行器才是真正从存储引擎存取数据的组件。不同的存储引擎会提供不同的接口,执行器会调用这些接口来进行查或增删改。如果mysql开启了缓存,就会将查到的结果集存到缓存区里面,然后将结果集返回客户端。





更多内容请关注微信公众号
zbpblog微信公众号

如果您需要转载,可以点击下方按钮可以进行复制粘贴;本站博客文章为原创,请转载时注明以下信息

张柏沛IT技术博客 > Mysql的分层架构

热门推荐
推荐新闻