1 MySQL逻辑架构
mysql是典型的CS架构,server主要分为以下三层:
(1)连接层:客户端与服务端建立连接,客户端发送SQL至服务端;
(2)服务层:对sql语句进行处理,创建语法树,确定执行计划;
(3)存储引擎层:与底层数据交互,负责数据的存储与读取;
1.1 连接层
建立TCP连接,进行密码鉴权等;
1.2 服务层
1.sql接口
接收用户的sql指令,并返回用户需要的结果;
2.解析器
先进行语法分析与语义分析,分析是否有错,并分解为数据结构用于后续步骤,创建语法树,对sql查询进行语法上的优化;
3.查询优化器
查询之前生成执行计划,执行计划中会确定如何使用索引,表之间的连接顺序;
4.查询缓存器
mysql5.7之前通过缓存查询结果的方式,如果查询有缓存则不需要再进行解析-查询优化-查询的过程,可以直接返回结果;
1.3 引擎层
插件式的存储引擎真正的进行底层数据的交互;
#查看数据库的引擎
SHOW ENGINES;
-- InnoDB #默认存储引擎
-- MRG_MYISAM
-- MEMORY
-- BLACKHOLE
-- MyISAM
-- CSV
-- ARCHIVE
-- PERFORMANCE_SCHEMA
-- FEDERATED
1.4 MySQL中的SQL执行流程
优化器:在优化器中决定sql的执行路径,比如进行全表检索还是索引检索;
一条查询可以有很多种执行方式,优化器作用就是找到最好的执行计划;
2 MySQL存储引擎
存储引擎表现为底层数据表的类型;
从底层数据存储来说:
#例如:
1.如果表test存储引擎为Innodb,则文件系统中会生成以下文件:
test.frm:描述表结构和字段类型(mysql8中不再提供该文件,而是合并到test.ibd)
iddata1:如果选择系统表空间
test.ibd:选择独立表空间
2.如果表test存储引擎为MyISAM,则文件系统中会生成以下文件:
test.frm:描述表结构和字段类型(mysql8变更为test.xx.sdi)
b.MYD:数据信息文件
b.MYI:索引信息文件
mysql5.7默认存储引擎为Innodb
2.1 存储引擎Innodb与MyISAM的区别
Innodb支持事务、外键约束、支持行级锁,适合高并发,适合CRUD都有的操作;
MyISAM不支持事务与外键,支持表级锁,如果只考虑select和insert操作的话效率比Innodb高一些;