当我们在项目中使用mybatis框架执行一条mysql语句时,会经历如下过程:
- mysql客户端(项目)连接mysql服务端,主要作用是验证客户端的用户密码、权限等、这一步一般发生在项目启动初始化时,连接器验证通过后将连接对象保存到内存中,以便使用。
- mysql客户端与服务端连接后,会判断这条语句是否命中查询缓存,命中直接返回查询结果,否则进去分析器。
- 分析器的主要功能是检查语法是否正确。
- 符合语法规则的sql送到优化器,就是进行调优,生成一些优化方案。
- 将调优后的sql方案传给执行器,执行器调用相应的存储引擎接口,如果是查询语句直接进行执行步骤,比如这条Sql有两个条件,会分解为两步判断。如果是更新语句则先查询出该条记录,修改后调用引擎接口,引擎会把数据保存到内存中,然后记录redolog(Innodb事务日志prepare状态),然后通知执行器可以提交了,执行器收到后记录binlog(二进制,主从复制),调用引擎接口,将redolog状态修改为提交。
总结:
1.mysql主要分为Server层和引擎层,Server层主要包括连接器、查询缓存、分析器、优化器、执行器同时还有一个binlog日志模块,redolog只有InnoDB引擎所有,引擎层主要有InnoDB、Myisam。
2.查询语句的路径:连接器->查询缓存->分析器->优化器->执行器->引擎接口。
3.更新语句的路径:连接器->执行器->引擎接口(redolog prepare)->执行器(binlog)->引擎(redolog commit)