认识MySQL
内部结构
- 连接器
管理连接 权限验证
- ~~查询缓存(1.8-) ~~
kv存储,k是查询语句,v是查询结果。以表为粒度,对表的更新操作都会导致缓存失效,因此使用查询缓存弊大于利 8.0去掉了查询缓存
- 分析器
词法分析 语法分析
- 优化器
RBO 基于规则的优化
CBO 基于成本的优化
- 执行器
操作引擎 和存储引擎 交互,返回结果, 存储引擎仅存储,执行器做计算
redolog/binlog/undolog
表的逻辑结构
Innodb的逻辑结构
- 表空间
- 段
- 数据段 索引的叶子节点
- 索引段 索引的非叶子节点
- 回滚段 用来存储undo日志
- 区
区是连接的页组成的空间,每个区固定大小1M,为保证区中页的连续性,Innodb会一次从磁盘申请4-5个区,一个区可以容纳64个连续的页。
新建表时,空表默认96k,是由于为了高效的利用磁盘空间。在开始插入数据时表会先利用32个页大小的碎片页来存储数据,当用完了,才以M的倍数来增加。
- 页
页是Innodb存储引擎的最小管理单元,每页默认是16k。innodb1.2可以利用innodb_page_size来改变页的size,但是改变只能在初始化innodb实例前进行修改,之后便无法进行修改,除非创建新库。常见的页有:
- 数据页
- undo页
- 系统页
- 事务数据页
- 插入缓冲位图页、插入缓冲空闲列表页
- 未压缩、压缩的二进制大对象页
- 行
行对应的表中行记录,每页存储的最多行记录也有硬性规定,最多16kb/2 - 200 = 7992行
行记录格式:
- Compact行格式
- Dynamic格式