1,连接层:主要用来处理mysql客户端对于mysql服务端的连接的。流程如下:
1)连接之后会判断用户名密码
2)校验之后分配一个线程来管理这个连接
3)查询用户的权限
4)返回连接id,准备接收sql语句
show processlist 查询当前用户的连接
2,slq层:主要是处理和优化sql语句,并确定并执行执行计划(从连接层的sql语句接口获取到sql语句)
1)判断sql语句类型(有query(select),dml(insert,update,delete),ddl(alert),status(show ...)等)
2)若sql语句类型为query,(mysql8.0之前,先检查查询缓存是否开启,然后检查是否命中缓存,如果命中,则直接返回,若没有命中,则继续下一步,8.0后则直接进入下一步)
3)sql解析器:将sql划分为小token
4)语法解析器:根据sql解析器获取得到的token,对token进行排列组合得到解析树(根据where条件的关键字来进行排列组合)
5)优化器:优化器根据解析树来选择合适的执行计划(这个执行计划不一定总是最优的)
3,存储引擎层:通过存储引擎接口来从磁盘数据层获取获取
4,磁盘数据:数据物理文件
innodb存储引擎:有两种文件,.ibd 数据和索引文件,.frm 表结构文件(.ibdata1是共享表空间)
myisam存储引擎:有三种文件,.frm 表结构文件,.myi 索引文件,.myd数据文件
网友评论