1.MySQL 属于CS结构即客户端/服务端,Client、Server。其中server层包含连接层、SQL层、存储引擎层
2.Server端的连接层、SQL层、存储引擎层
连接层(Connector):负责跟客户端建立连接、获取权限、维持和管理连接。
SQL 层:预处理、解析、优化(物理优化、逻辑优化)、生成指定的执行计划。
存储引擎层:负责数据的存储和提取,支持 InnoDB、MyISAM、Memory 等多个存储引擎。
3.连接层
作用:提供连接协议、验证、提供专用连接线程
命令:mysql -h$ip -P$port -u$user -p
客户端发送请求服务端,通过一串字符串连接到整个服务端,同时服务端的连接层接收到请求后,对客户端提供的字符串进行验证,连接层提供协议、验证、再提供一个专有的连接线程。
其中协议有:TCP/IP、Socket文件。
验证:用户名、密码、端口进行验证,数据库启动后会将授权表加载到内存中,进行用户名,密码,端口进行比对验证。其中授权表包含:mysql.user、mysql.db、mysql_table.priv、mysql_column_priv.
连接线程:每连接一个都会生成一个连接线程,所以会有多个连接线程.通过show processlist; 可以查看到前台线程。
4.SQL层
主要分为四个阶段:预处理、解析、优化、执行语句
预处理:判断语句中的语法、语义、权限处理等。
解析:校验OK,就生成“解析树”,把语句拆分成多个块,生成一种树形结构来表示执行顺序。解析出来的树叫抽像语法树AST。
优化:分为逻辑优化-->物理优化。基于Cost-Based Optimizer
模型,预估
每条执行方式的成本,
选择成本最小
的执行方式,最终转化为执行计划explain
逻辑优化:优化器算法--->关系代数的等价转换
物理优化:统计信息(表的状态信息,比如表名、数据行、数据分布、索引状态信息)、优化器算法
执行:根据执行计划去执行语句
5.存储引擎层
作用:负责和磁盘交互