MySQL体系架构简单介绍

1,218 阅读4分钟

「这是我参与11月更文挑战的第1天,活动详情查看:2021最后一次更文挑战

MySQL数据库管理系统,在软件开发中用的比较多,基本上很多公司都在使用MySQL数据库,是一款比较成熟的产品。MySQL的体系架构如下图所示:

image.png

从上面的图可以看出,MySQL主要分为三层:连接层、服务层、存储引擎层。

image.png

连接层

连接池:缓存连接信息

在客户端跟数据库进行交互通信的时候,每次建立连接的时候都需要消耗很多时间,也会占据很多资源,连接池作用就是将这些连接缓存起来,后面需要执行SQL语句的时候,无需在二次建立链接,直接取出来用就行。

SQL接口:负责处理接收到的SQL语句

SQL L接口是一套执行SQL语句的接口,专门用于执行我们发送给MySQL的增删改查的SQL语句,因此MySQL的工作线程接受到SQL语句之后,就会转交给SQL接口去执行,等待SQL执行完成后,将执行的结果返回给客户端。

服务层

缓存器:将查询结果缓存起来

将SQL执行的结果缓存起来,下次如果遇到一模一样的SQL语句,那就直接从缓存中缓存结果给客户端返回,不在交给后续的流程去执行。但是在执行过程中,缓存器的功能一般都是关闭的,主要原因我认为有几点:

  1. 缓存命中的规则十分的苛刻,必须要一模一样的语句才可以命中缓存规则
  2. 缓存执行结果会增加服务器额外的性能开销,一般数据库都要保证高性能,减少额外的开销
  3. 缓存不是数据库的强项,专业的事情交给专业的人去干,现在市面上有比较完善的缓存服务,例如Redis等等

查询解析器:让MySQL能看懂SQL语句

查询解析器主要作用就两点:

  1. 分解SQL语句,将SQL语句分解成各种数据结构,并且将分解好的结构传递给后续步骤,在后续的执行过程中都是基于解析器分解好的数据结构,而不再是客户端传入的SQL语句
  2. 在分解SQL语句过程中发现无法分解,就说明客户端传入的SQL语句存在语义问题,将具体的语义错误回执给客户端,这样的就起到了语义校验功能

查询优化器:选择最优的查询路径

查询解析器将SQL语句进行分解后,并不是直接交给执行器去执行语句,而是要先经过查询优化器,对我们的SQL语句进行优化,有些时候并不是按照我们的SQL语句的语法去执行,会对SQL语句进行改写,以服务器认为最优的执行结果去执行SQL。

执行器:根据执行计划调用存储引擎的接口

结果前面一连串的操作后,才会到执行器,执行器就会去根据我们的优化器生成的一套执行计划,然后不停的调用存储引擎的各种接口去完成SQL语句的执行计划,将执行的结果从储存引擎获取然后返回给客户端。

存储层

存储层将数据持久化到磁盘文件中,保证数据不丢,存储层主要有存储引擎来完成,主要有两类存储引擎:InnoDB,MyISAM。

InnoDB存储引擎

在MySQL5.5之后数据库默认的存储引擎,主要优势:

  1. 支持事务,保证插入的数据一致性
  2. 锁的颗粒度为行级锁,这样可以支持更高的并发
  3. 支持外键:这个在实际中用的比较少,一般外键都是我们在开发中保证外键,并不在数据库显示声明、

MyISAM存储引擎

在MySQL5.5之前,都采用是MyISAM存储引擎,相对于InnoDB在综合实力方面要差一点,

  1. 不支持事务,这样的话就无法保证数据一致性
  2. 对插入的性能比较高,查询速度也比较快,毕竟不支持事务,在查询插入的时候会减少很多操作