暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL架构总览

无限递归 2021-11-24
665

写在前面

    欢迎各位小伙伴对日记的布局、日记的内容等各个方面提出宝贵的意见和建议,我将会在能力范围内尽量完善哟
    同时也欢迎各位小伙伴批评指正日记中记录不正确的地方,以帮助其他小伙伴获得正确知识----赠人玫瑰,手有余香。


我宣布一下啊!胡巴今天开始要做MySQL相关知识的总结与整理了...👏👏👏


本次知识整理持续时间可能会比较久,估计会持续个一年半载的,哈哈哈!毕竟我那本书还没看完。通过我看书对比,我感觉MySQL的东西要比Redis的多一些,总结起来呢,感觉也不太容易表达清楚,所以在总结过程中,难免会有出问题的地方,欢迎各位大佬批评指正!



我觉得想要了解MySQL的知识,首先要从全局视角来看一下它里面都有什么东西,也就是要先看一下它的整体架构是什么样子的。

我在MySQL官网中找到这样的一张图:


图片来源于官网


从图中首先可以看出,MySQL是CS架构,即客户端、服务器架构,客户端通过网络与服务器进行通信,进行数据交互。


其次我们还可以看出MySQL服务器架构中分为这么几个部分:

1. NoSQL Interface(非结构化SQL接口)

2. SQL Interface(结构化SQL接口)

3. Parser(解析器)

4. Optimizer(优化器)

5. Cache & Buffers(缓存&缓冲)

6. Storage Engines(各种存储引擎)


模块看起来还是挺清晰的,大致分了这6个部分,下面我们先简单说一下这6个部分的作用。



NoSQL Interface

MySQL8.0后支持的新功能,可以理解为MySQL内部集成了Mongodb的功能。由于这部分我不是特别了解,所以不过于多说,总结的过程中应该也很少涉及这部分东西,感兴趣的小伙伴可以自行查阅了解。

SQL interface

SQL Interface 是MySQL提供的一套标准化组件,这套组件用来执行客户端发过来的各种增删改查 SQL语句、DML语句、存储过程等。

Parser 解析器

解析器看起来就很好理解,它主要负责让MySQL看懂SQL语句,比如客户端说了一句:select goods_id,name from goods where goods_id = 1234,MySQL通过解析器就能知道这个语句的意思是让我到goods表中查出goods_id是1234的商品的商品名字和商品ID信息。



Optimizer 优化器

优化器重在优化,那它都优化些什么呢?优化器主要优化SQL的执行路径,通过预估SQL的执行代价,选择最优的索引、进行子查询的优化等,形成靠谱的执行计划。

Cache & Buffers 缓存 & 缓冲

这部分主要是实现了MySQL的一些全局缓存、缓冲,以及存储引擎的缓存、缓冲。包括后面要提到到的Buffer pool、change buffer 、查询缓存应该都在这里。

Storage Engines 存储引擎

存储引擎我理解为对文件或者内存进行管理的抽象层,该层包含多种可插拔式的存储引擎,包括Innodb,MyISAM,Memory,Archive,CSV等,后面我们的总结将集中于Innodb存储引擎。


上面6个部分你记住了吗?如果你都记住了的话,那当下一次面试官问你:“详述一条select语句的执行流程”时,你大概应该可以答个八九不离十了吧...


我简单将答案串联一下:

1. 客户端通过TCP/IP网络连接将select查询语句发送到服务端
2. 服务端拿到select语句后,检查查询缓存,如果存在缓存数据,则直接返回

3. 如果缓存中没有相应数据,则select语句会被Parser进行词法解析和语法解析

4. 解析完成后Optimizer 将对select语句进行优化,生成执行计划

5. 调用存储引擎相关接口根据执行计划做SQL查询

6. 将查询结果逐层返回,最后给到客户端



至于另一个面试问题:“详述一条Update语句的执行过程”,光看了上面这几部分还不太够,还要深入引擎层才能说的更加详细,后面在总结了InnoDB存储引擎后,我们再基于Innodb引擎说一下这个面试问题的答案。

后面我将重点总结Innodb存储引擎相关的知识点,争取用图文并茂的方式给小伙伴们讲解明白Innodb的每一个部分。












扫码关注更多精彩



文章转载自无限递归,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论