MySQL 软件提供了一个非常快速、多线程、多用户和健壮的 SQL(结构化查询语言)数据库服务器。MySQL Server 旨在用于任务关键型、重负载生产系统以及嵌入到大规模部署的软件中。Oracle 是 Oracle Corporation 和/或其附属公司的注册商标。MySQL 是 Oracle Corporation 和/或其附属公司的商标,未经 Oracle 明确书面授权,客户不得使用。其他名称可能是其各自所有者的商标。(复制的官网原话)

mysql in的底层怎么实现 mysql底层结构_SQL

上面是MySQL8.0版本以前的逻辑架构宏观组件视图,其主要分为两层,一层是MSQL server层,一层是引擎层。其中,selector并不是引擎层的组件,而是server层的,画在引擎层是在感官上表示其数据传递逻辑。

在server层中,主要有六个组件,分别是:

1. 连接器:主要负责与外界连接,代表有JDBC等。同时,其也有一定的信息验证功能(用户名和密码验证),权限检查等。

2. 缓存:MySQL8.0以前的Server层组件,主要作用是 MySQL 在执行 select 操作时,可以根据SQL计算出其Hash值,然后映射返回其查询结果集值。

MySQL 缓存,是 KV(key-value)结构,其中 key 是SQL语句的hash值,value是根据SQL语句查询所得的结果集。

3. 分析器:对 SQL 语句进行分析,主要有两步,分别是:

(1)词法分析:对SQL语句进行词法分析,以下SQL语句举例:

select * from table_t where f1 = 1;

对如上SQL语句进行分析,判断select操作,是查询操作;对from分析,是从table_t 进行查寻;对where分析,查询条件是"f1 = 1"(注意,词法分析只是对SQL语句进行切片,并不进行任何操作,说白了就是纯字符串操作)

(2)语法分析:对上述SQL进行词法分析后,需要对SQL语句进行语发分析,如果不符合MySQL语句标准,报You have an error in your SQL syntax错误。

4. 优化器:分析器使MySQL知道了SQL要干什么,而优化器是让MySQL知道SQL怎么做。在此阶段,MySQL会将SQL构建成一个执行树,服务引擎会根据执行树一步步操作。

5. 执行器:有了干什么,也有了执行方案,那还缺一个执行者。这个执行者就是执行器,执行器负责与引擎层取得联系,将SQL语句以及额外的扩展信息(例如引擎信息)发送给selector选择器。

6. selector选择器:选择器本身不是引擎层的服务,而是MySQL服务层的服务,执行器会将SQL和扩展信息发送给选择器,选择器拿到信息后进行解析,然后调用引擎接口,执行SQL语句,并返回结果给客户端。


引擎层,有点基础的都知道MySQL是多引擎数据库服务,支持插拔式操作。在MySQL生态体系中,引擎可以根据公司的业务需求不同,进行自我的开发。最初的InnoDB引擎就是外接引擎,而由于InnoDB优秀的设计,以及丰富的功能,最终征服了MySQL社区和Oracle,让其成为MySQL8.0以后到目前为止的默认引擎。

引擎层的主要作用是和底层磁盘取得联系,将客户的信息存储在磁盘中,并在存储的过程中,利用各自引擎不同的特点,将存储优化和处理。

关于引擎,目前最主流的就是InnoDB和myIsam,后续会补上这两种引擎的区别以及各自的特点。此处只是提个大概,总结下来就是,引擎能提供统一接口供selector调用,让其磁盘和外界有交互,负责数据的底层存储和优化等。