MySQL 的基础架构
MySQL 的基本架构示意图,从中你可以清楚地看到 SQL 语句在 MySQL 的各个功能模块中的执行过程。
大体来说 MySQL 分为 Server 层和储存引擎层两部分。
Server 层包括连接器、查询缓存、分析器、优化器、执行器等涵盖 MySQL 的大多数核心服务功能,以及所有的内置函数,所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。
储存引擎负责数据的存储和提取,架构模式是插件式的,支持 InnoDB、MyISAM、Memory、等多个储存引擎。5.5 后默认储存引擎 InnoDB。
Server 各个组件作用
连接器
连接器负责客户端建立连接、获取权限、维持和管理连接。
查询缓存
MySQL 拿到一个请求后,会先去查询缓存看看、之前是不是执行过这条语句。之前执行过的语句可能会以 key-value 对的形式被直接放在内存。如存在直接返回结果,不存在则查询,并将结果记入缓存。
对于更新压力大的数据库来说,查询缓存的命中率会非常低。需要注意的是,MySQL 8.0 版本直接将查询缓存的整块功能删掉了,也就是说 8.0 已经没有缓存了。
分析器
对 SQL 语句做解析,如果你的语句不对,就会收到“You have an error in your SQL syntax”的错误提醒。
例如:从你输入的"select"这个关键字识别出来,这是一个查询语句,根据词法分析的结果,语法分析器会根据语法规则,判断你输入的这个 SQL 语句是否满足 MySQL 语法。
优化器
优化器是在表里面有多个索引的时候,决定使用哪个索引;或者在一个语句有多表关联(join)的时候,决定各个表的连接顺序。比如你执行下面这样的语句,这个语句是执行两个表的 join:
mysql> select * from t1 join t2 using(ID) where t1.c=10 and t2.d=20;
- 既可以先从表 t1 里面取出 c=10 的记录的 ID 值,再根据 ID 值关联到表 t2,再判断 t2 里面 d 的值是否等于 20。
- 也可以先从表 t2 里面取出 d=20 的记录的 ID 值,再根据 ID 值关联到 t1,再判断 t1 里面 c 的值是否等于 10。
这两种执行方法的逻辑结果是一样的,但是执行的效率会有不同,而优化器的作用就是决定选择使用哪一个方案。
执行器
MySQL 通过分析器知道了你要做什么,通过优化器知道了该怎么做,于是就进入了执行器阶段,开始执行语句。
具体做法是:开始执行的时候,要先判断一下你对这个表有没有权限,如果没有就会返回错误,如果有权限,就会打开表继续执行,执行器就会根据表的引擎定义,去使用引擎提供的接口。
声明:此篇文章的主体内容均出自极客时间的 MySQL 实战 45 讲,非本人原创,只是在学习的过程中觉得有必要将其写入个人博客之中,且最终目的只是为了方便自己或有需要的人进行查阅。此外,若需转载本文仍需本人同意。
下一篇: MySQL 学习笔记-----日志模块
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于