一、MySQL体系架构
Client Connectors
所有与MySQL进行sql交互的终端
MySQL construction
MySQL server 服务端
1、Connection Pool(数据库连接池)
管理、缓冲用户的连接、用户名密码校验、权限校验、线程处理等需要缓存的需求
2、Management Serveices & Utilities(管理服务和工具组件)
系统管理和控制工具,例如备份恢复、Mysql复制、集群等
3、SQL Interface(sql接口,可理解为对外暴露的OpenApi)
接受用户的SQL命令,并且返回用户需要查询的结果
4、Parser(查询解析器)
SQL命令传递到解析器的时候会被解析器验证和解析(权限、语法结构),解析器是由Lex和YACC实现的(其他语言),
主要功能:
①将SQL语句分解成数据结构,并将这个结构传递到后续步骤,以后SQL语句的传递和处理就是基于这个结构的
②如果在分解构成中遇到错误,那么就说明这个sql语句是不合理的
5、Optimizer(查询优化器)
SQL语句在查询之前会使用查询优化器对查询进行优化,使用的是“选取-投影-联接”策略进行查询
select id,name from user where age = 40;
a、这个select 查询先根据where 语句进行选取,而不是先将表全部查询出来以后再进行age过滤
b、这个select查询先根据id和name进行属性投影,而不是将属性全部取出以后再进行过滤
c、将这两个查询条件联接起来生成最终查询结果
6、Cache和Buffer(高速缓存区)
Cache是加速“读”,而 buffer是缓冲“写”,前者解决读的问题,保存从磁盘上读出的数据,后者是解决写的问题,保存即将要写入到磁盘上的数据。
如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中取数据,通过LRU算法将数据的冷端溢出,
未来得及时刷新到磁盘的数据页,叫脏页。这个缓存机制是由一系列小缓存组成的。比如表缓存,记录缓存,key缓存,权限缓存等
7、processer处理器(执行器)
根据所对应的处理请求的不同,是分别由 insert 处理器、delete 处理器、update 处理器、create 处理器,以及 alter 处理器这些小模块来负责不同的 DML 和 DDL
Engine 存储引擎
存储引擎说白了就是如何管理操作数据(存储数据、如何更新、查询数据等)的一种方法。因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也可以称为表类型(即存储和操作此表的类型),注意存储引擎是表级别的,而不是数据库级别的,不同的表可以指定不同的存储引擎
CREATE TABLE `test` (
name` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
files & logs 磁盘文件
真正存储Mysql数据、索引、日志等物理文件的地方,不同的Engine文件目录会有所不同,比如对于myIsam,
.frm存储表定义,.MYD存储数据文件 ,.MYI代表索引文件。对于innodb,.frm存储表定义,.idb存储数据和索引,在同一个文件中。