wky233 的个人博客

记录精彩的程序人生

Open Source, Open Mind,
Open Sight, Open Future!
  menu
40 文章
10233 浏览
1 当前访客
ღゝ◡╹)ノ❤️

MySQL学习笔记-----基础架构

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学习笔记-----日志模块


标题:MySQL学习笔记-----基础架构
作者:wky181
地址:https://www.wkyhky.site/articles/2020/01/13/1578900228277.html