2021-04-20

MYSQL基础架构和执行流程
MYSQL可以简单分为client, server层和引擎层。我们操作数据库之前, 首先要通过客户端连接上Mysql, 这时候和客户端建立连接的是连接器, 连接之后会对我们的用户密码进行校验,包括用户的权限, 因为权限校验是在连接时候校验的, 所以一旦我们成功连接, 即使过程中权限做了修改,对于已建立的链接也是无感知的。接下来我们就可以执行Sql语句了, 当我们执行一条sql如 select * from user时,首先会查询缓存, 如果命中缓存则直接返回结果, 如果没有命中缓存则会由分析器对我们的sql语句做词法/语法分析, 解析我们的sql, 分析完毕之后优化器会根据查询条件选择合适的索引或者全表扫描数据, 然后由执行器调用server层的接口执行sql返回结果, server层之上还有引擎层, mysql引擎是插件式的, 常见的引擎有memory, myisam, innodb, innodb在5.5之后成为默认的存储引擎, 一个很重要的原因是innodb支持事务和行锁, 关于锁和事务这篇不做展开, 现在重新过一遍sql整个流程, 顺便分析一下可能的优化点(不展开)。
在这里插入图片描述

客户端建立连接时, 首先连接器建立连接, 权限校验, 连接会走经典的三次握手, 因此为了避免频繁的建立连接, 许多orm框架都会采用连接池技术, 然后是查询缓存(8.0已移除因为缓存失效频繁), 词法分析, 此过程不可缺少, 接着是优化器选择索引, 这一步通常是我们最为关注也是最难的一个优化点, 然后是执行器执行sql, 调用引擎层接口返回数据, 到这里一条sql就执行完成了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值