Mysql 宏观架构

从宏观的角度去看mysql的大体架构的话可以看出是分为两层,一个是server层另一个是存储引擎层。

server:
  1. 连接器:负责管理连接的管理客户端与服务端的连接。进行验证、获取账号权限等。mysql使用的是tcp协议进行传输数据的。所以会存在长时间如果不用连接会出现资源浪费的情况,所以肯定是可以设置空闲时间,如果是超过空闲时间将会断开,释放资源等等。其实连接器主要还是负责与外部建立了连接。(ps:就像你要进我家门,我要知道你是谁,我才会开门让你放行,当然也有驱逐你的权利。可以这么理解)。

  2. 缓存查询:这个就比较好理解一些,就像我们的业务进行查询数据的时候,如果缓存中有那就在缓存中取(以key-value形式存储。key为sql,value为值),没有就往下继续找。但是会有一些问题,如果数据更新比较频繁的话,那缓存就没用了,感觉没啥必要。

  3. 解析器:

    • 词法分析:根据你输入的sql语句根据及解析器识别出关键字
    • 语法分析:会根据语法解析器的规则去分析当前sql的语法是否正确(比如from和form)如果语法报错就直接报错了。
  4. sql执行流程(开始执行sql)

    • 预处理器:检查当前sql的表、字段是否存在。将select * 扩展到所有表。进行预处理(prepare)阶段
    • 优化器:这里就是要进行当前sql要使用哪种方案进行执行,就是根据计算成本(查询成本)来决定使用哪个索引。
    • 执行器:确定好查询方案之后,然后执行sql,与存储引擎进行交互。
存储引擎层:

这里负责的是数据(读取与写入)存储方面的后续详细讲讲。

总结:

我的理解为:从宏观的角度去看mysql的整体架构。首先是server层开始。首先是连接器,主要负责管理连接,验证,鉴权。然后看当前sql如果是查询将会先走到缓存这里进行获取数据(mysql8.0已经没有缓存了)。在到解析器这里,先进行词法分析,识别出关键字,然后进行语法分析,判断当前是否出现语法错误生成语法树。最后到sql执行阶段,预处理器:会先进行sql判断当前表字段是否存在,然后将sql完全展开;以上都没有问题之后将会走到优化器,这里优化器会根据计算成本去选用合适的执行方案,就是会去选择成本较低的索引作为执行方案;执行器:这里就是执行sql,根据优化器提供的方案执行sql与引擎交互,调用存储引擎接口获取数据。最后到存储引擎层,这里主要负责数据的读取和写入。

相关推荐
mldong27 分钟前
审批流程图上那些亮着的线,数据库里一条都没存:jeeflow 工作流引擎的高亮是重算出来的
后端·架构
程序员Sunday12 小时前
MySQL 为什么使用 B+ 树索引?把范围查询、回表和覆盖索引连起来
数据库·mysql
Dawson Zhu13 小时前
《Agentic Design Patterns》第 9 章导读:学习与适应(Learning and Adaptation)
人工智能·语言模型·架构·aigc·agi
Yyyyyy~13 小时前
[ Mysql ] 库的操作
mysql
小米里的大麦13 小时前
16 MySQL 事务
数据库·mysql
Titan202413 小时前
MySQL访问个人学习笔记
笔记·学习·mysql
姜鱼问生14 小时前
Linux 日志增量统计:inode + offset 方案(不丢不重)
架构
软件工程师_罗小东14 小时前
我把这套 AI 落地方案,讲成一条任务闭环
架构
阡陌数智14 小时前
Llama 4 MoE 架构深度拆解:交替稀疏专家设计与生产环境推理落地实战
架构·llama
for_ever_love__14 小时前
MySQL 全文索引实战:FULLTEXT、ngram 中文分词与 MATCH AGAINST 到底该怎么用
java·python·mysql·全文检索·分词·索引·ngram