写在前面



我宣布一下啊!胡巴今天开始要做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. 将查询结果逐层返回,最后给到客户端




扫码关注更多精彩