MySQL架构
目录
一、MySQL架构
- 连接器——管理连接、权限认证
- 分析器——词法分析、语法分析(AST)抽象语法树
- 优化器——执行计划、索引选择
- 执行器——操作引擎、返回结果
- 存储引擎——存储数据,提供读写接口
8.0版本之后,舍弃了查询缓存功能
二、连接器
连接器负责跟客户端建立连接,以获得权限、维持和管理连接
- 用户名密码验证
- 查询权限信息、分配对应权限
- 可以使用show processlist查看现在连接
- 如果太长时间没有动静,就会自动断开,通过wait_timeout控制,默认8小时
连接分类:
- 长连接:建议
- 短连接
三、查询缓存
查询语句的时候,先去查询缓存查看结果,8.0后没有这个组件
不推荐理由:
- 查询缓存失效比较频繁,只要表更新,缓存就会清空
- 缓存对应更新数据命中率比较低
四、分析器
- 词法分析:MySQL需要把输入字符串进行识别
- 语法分析:根据语法规则判断SQL是否满足mysql的语法,如果不符合就会报错“You have an error in your SQL synta”
五、优化器
- 在具体执行SQL语句之前要经过优化器进行处理
- 当表中有多个索引,决定使用哪个索引
- 当需要多表关联,决定表的连接顺序...等
- 不同的执行方式对SQL语句执行效率影响很大
- CBO(Cost-Based Optimization):基于成本的优化
- RBO(Rule-Based Optimization):基于规则的优化
日志系统
5.1.Redo log——innodb存储引擎的日志文件
发生数据修改的时候,innodb会先卸载redo log中,并更新内存,此时更新完成,redo日志是固定大小的,是循环写的过程
事务中就是通过redo log进行书写的
5.2.Undo log——操作数据,先将数据备份
进行修改数据,先进行备份,之后可以再次进行
5.3.binlog——记录是逻辑日志
可备份逻辑日志
binlog是server层的日志,主要做mysql功能层面的事
与redo日志区别:
- 1.redo是innodb独有的, binlog是所有引擎都可以用的
- 2.redo是物理日志,记录在某页做了什么修改,binlog是逻辑日志,记录是这个语句的原始逻辑
- 3.redo是循环写的,空间是用完,binlog是可以追加的,不会覆盖之前的日志信息