关于java:一文搞懂MySQL架构设计再也不用担心面试官问得太深

很多开发同学对SQL优化一五一十,却对MySQL架构只知其一;不知其二。岂不是只见树叶,不见森林,终将陷入细节中不能自拔。

明天就一块学习MySQL分层架构,深刻理解MySQL底层实现原理,以及每层的作用,咱们常见的SQL优化到底在哪一层做了优化?

1. MySQL整体架构

由图中能够看到MySQL架构次要分为Server层存储引擎层

Server层又分为连接器、缓存、分析器、优化器、执行器。所有跨存储引擎的性能都在这层实现,比方:函数、存储过程、触发器、视图等。

存储引擎是可插拔式的,常见的存储引擎有MyISAM、InnoDB、Memory等,MySQL5.5之前默认的是MyISAM,之后默认的是InnoDB。

2. 连接器

连接器次要用来治理客户端的连贯和用户身份认证。

客户端与Server端的连贯采纳的是TCP协定,通过TCP握手,建设连贯之后,连接器开始进行身份验证。

> mysql -hlocalhost -P3306 -uroot -p

如果认证失败,就会呈现谬误 ERROR 1045 (28000): Access denied for user ‘root’@’localhost’ (using password: YES)

能够通过 show processlist 命令查看零碎所有连贯的信息:

其中Commond列示意连贯状态,Daemon示意后盾过程,Query示意查问,Sleep示意闲暇连贯。

3. 查问缓存

客户端申请不会间接去存储引擎查问数据,而是先在缓存中查问后果是否存在。如果后果已存在,间接返回,否则再执行一遍查问流程,查问完结后把后果再缓存起来。

如果数据表产生更改,将清空生效缓存,例如 insert、update、delete、alter操作等。

对于频繁变更的数据表来说,缓存命中率很低。应用缓存反而升高了读写性能,所以在MySQL8.0当前就移除了缓存模块。

能够通过上面命令查看是否开启了缓存:

4. 分析器

分析器次要对SQL语句进行词法剖析语法分析

首先进行词法剖析,剖析出MySQL的关键字、以及每个词语代表的含意。而后进行语法分析,检测SQL语句是否合乎MySQL语法要求。

MySQL通过辨认字符串中列名、表名、where、select/update/insert 等MySQL关键字,在依据语法规定判断sql是否满足语法,最终会生成一个形象语法树(AST)。

比方:SQL语句中少写个where关键字,就会提醒谬误。

mysql> select * from user id=1;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '=1' at line 1

5. 优化器

在真正执行SQL语句之前,还须要通过优化器解决。

咱们熟知的执行打算(Explain)就是优化器生成的。

优化器次要有两个作用:逻辑优化物理优化

逻辑优化次要进行等价谓词重写、条件化简、子查问打消、连贯打消、语义优化、分组合并、抉择下推、索引优化查问、表查问替换视图查问、Union替换or操作等。

物理优化次要作用是通过贪心算法,依据代价估算模型,估算出每种执行形式的代价。并应用索引优化表连贯,最终生成查问执行打算。

附上MySQL优化器架构图,能够清晰的看到优化过程:

如果想晓得优化器估算后果信息,能够通过Explain查看,关注一灯,下篇文章会具体解说Explain具体用法。

6. 执行器

在优化器优化完SQL,并生成了执行打算后,就会把执行打算传递给执行器。

执行器调用存储引擎接口,真正的执行SQL查问。获取到存储引擎返回的查问后果,并把后果返回给客户端,至此SQL语句执行完结。

7. 总结

本篇文章次要带大家理解了MySQL分层架构,以及每层的架构的作用。能够看出MySQL每层架构分工明确、逻辑清晰,粗浅地体现了架构设计中“高内聚,低耦合”的设计思维。咱们平时在做架构设计的时候,也要多学习一下这种分层架构的设计思维。

文章继续更新,能够微信搜一搜「 一灯架构 」第一工夫浏览更多技术干货。

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理