mysql的逻辑架构分为三层:
一、客户端:并非mysql独有。功能:连接处理、授权认证、安全等
二、核心服务:有查询解析、分析、优化、缓存、内置函数(比如:时间、加密、截取等);所有的跨存储引擎的功能都在这里实现,如:存储过程、触发器、视图等
三、存储引擎:负责mysql中的数据存储和提取
mysql的体系结构分为两层:
一、mysql服务层
1、连接层:客户端或引用程序通过接口(如:ODBC、JDBC)来连接mysql时最先通过连接层
1)通讯协议:负责检测客户端版本是否与服务端兼容
2)线程处理:对每一个连接请求都分配一个独立的线程
3)用户名密码认证:输入的账号、密码及主机(host)是否可以连接到mysql服务器
2、sql层
1)权限判断:判断登录用户可以访问到mysql中的那些库和表
2)查询缓存:查询时如果数据在query cache中直接返回否则查询数据库(mysql8中废弃)
3)解析器:分为词法解析和语法解析。词法解析(把sql语句打碎成一个一个的单词,判断每个符号是什么类型,从哪儿开始从哪儿结束);语法解析(对sql进行一些语法检查,比如单引号有没有闭合,根据sql语句生成一个数据结构叫做解析树)
4)预处理器:判断解析器生成的解析树中的表名及字段名是否存在。存在则生成一个新的解析树
5)优化器:根据解析树生成不同的执行计划,然后选择一条最优的执行
比如多表联合查询选择拿一张表作为基准,有多个索引时选择使用哪个索引,移除1=1的恒等式等等。优化器最终会把解析树变成一个执行计划,执行计划也是一个数据结构。最后选择的执行计划不一定是最优的执行计划。我们们在语句执行加上explain就可以查询到执行计划的信息。如果想要详细的信息,就用format=json。
比如语句为:explain format=json select name from user where user_id = 1
二、存储引擎层(存储引擎可以根据官方文档DIY)
1、innodb:支持事物,其设计主要应用于在线事务处理中。特点:行锁,支持外键。默认读取时不会产生锁,5.5版本后是默认的存储引擎
2、myisam:不支持事物,支持全文检索