image.png
mysql分为 server层 和 储存引擎层

连接器

连接器负责与客户端即那里连接,获取权限,维持和管理连接
当客户端工具输入ip 、port 、user 、password,客户端开始和服务端建立连接
完成经典的三次握手,连接器开始用你输入的 user 和 password 认证你的身份
如果认证不通过,抛出“Access denied”
如果认证通过,连接器会到权限表中查询你的权限
(之后对数据库的所有操作都依赖此时这个连接读到的权限)
这样意味着,成功建立连接后,即使修改账号权限,也不会影响已存在连接的权限
连接完成后,如果没有后续动作,这个连接就处于空闲状态,默认8小时后自动断开

查询缓存

连接建立完成后,就可以进行语句查询了
之前查询过的语句会以key-value的形式放到缓存中,key是查询语句,value是查询值
若输入的查询语句在缓存中,直接将value返回值客户端
若不在缓存中,进行后续操作
(查询缓存的失效很频繁,只要有一个表更新,这个表的所有缓存就会被清空 8.0之后没有这个功能了)

分析器

mysql 从你输入的关键字开始识别,做完识别后,就要做语法分析
语法分析器会根据语法规则,判断你输入的sql语句是否满足mysql语法

优化器

经过分析器,mysql知道你要做什么了。然后需要到优化器
优化器是在表中有多个索引时,判断使用哪个索引 或 多表关联的连接顺序
比如 select * from t1 join t2 …
既可以从t1 取出值 再关联到t2 再判断where
也可以从t2 取出值 再关联到t1 再判断where
两种方案的逻辑结果是一样的,但是执行效率不同,优化器的作用就是决定使用哪个方案

执行器

执行前先判断你有没有权限
如果没有,就返回没有权限的错误
如果有权限,打开表执行
具体内部引擎执行逻辑后续介绍