MySQL的基本架构
连接器
负责跟客户端建立连接,获取权限,维持和管理连接
- 用户名密码验证
- 查询权限信息,分配对应的权限
- show processlist 查看现在的连接
- wait_time控制维持连接的时长,默认八小时
连接分两种:
长连接:长连接是相对于短连接来说的。长连接指在一个连接上可以连续发送多个数据包,在连接保持期间,如果没有数据包发送,需要双方发链路检测包。
客户端连接–创建socket认证连接–维护连接–数据传输–维护连接–数据传输…..-关闭连接
在频繁的与数据库服务通信,并且又非高并发的情况下,使用长连接更合适;
短连接:是指通讯双方有数据交互时,就建立一个连接,数据发送完成后,则断开此连接,即每次连接只完成一项业务的发送
客户端连接–创建socket认证连接–维护连接–数据传输–关闭连接
太多持久连接,大部分是sleep状态的,或者系统是高并发的,使用短连接更合适。
查询缓存
当执行查询语句的时候,会先去查询缓存中查看结果,之前执行过的sql语句及其结果可能以key-value的形式存储在缓存中,如果能找到则直接返回,如果找不到,就继续执行后续的阶段。
一般不用查询缓存,同时在8.0版本已经将此功能删除:
- 查询缓存的失效比较频繁,只要表更新,缓存就失效。
- 缓存对应新更新的数据命中率比较低。
分析器
词法分析: 把输入的字符串进行识别每个部分代表什么意思
语法分析: 根据语法规则判断这个sql语句是否满足mysql的语法,如果不符合就会报错
优化器
在具体执行sql之前,要先经过优化器的处理
- 决定表中使用哪个索引
- 多表关联时,表的连接顺序
不同的优化方式对sql语句的执行效率有很大的影响
- RBO:基于规则的优化
- CBO: 基于成本的优化
执行器
当选择了执行方案后,mysql就准备开始执行了。
- 执行前会校验该用户有没有权限,如果没有权限,就会返回错误信息,
- 如果有权限,就会去调用引擎的接口,返回接口执行的结果。