目录
五 表
(一)索引组织表
在InnoDB中,表都是根据主键顺序组织存放的,这种存储方式的表称为索引组织表。每个InnoDB的表都有主键,如果创建表时没有显式的定义主键,则InnoDB会自动为表选择或创建主键:
- 判断表中是否有非空的唯一索引,若有则该列为主键,若有多个则第一个定义的索引列为主键。
- 如果没有非空的唯一索引,则创建一个6字节大小的列作为主键。
(二)逻辑存储结构
InnoDB中,所有数据都被逻辑的存放在一个空间中,称为表空间(tablespace)。表空间又由段(segment)、区(extent)、页(page)组成,如下图所示:
1 表空间
表空间是InnoDB逻辑结构的最高层,所有数据都放在表空间中。我们知道InnoDB有一个共享表空间,所有数据都存放在这个表空间中,如果用户启用了参数innodb_file_per_table,则每张表内的数据可以单独放到一个表空间内。
需要注意,每张表空间只存放数据、索引和插入缓冲Bitmap页,其他的回滚信息、事务信息、二次写缓冲还是存放在共享表空间。
2 段
表空间是有各个段组成的,常见的段有数据段、索引段、回滚段等。我们知道InnoDB是索引组织表,因此索引段即为表空间中的非叶子节点段,数据段为表空间中的叶子节点段(参照上文结构图)。
注意:回滚段较为特殊。
3 区
区是由连续页组成的空间,每个区的大小固定为1MB,为了保证区中页的连续性,InnoDB一次从磁盘申请4到5个区,一个区中默认包含64个连续的页(由于页的可压缩行和页默认大小的可配置性,这个值会发生变化)。
4 页
页是InnoDB磁盘管理的最小单位,页的大小默认为16KB,从InnoDB1.2.x版本开始,可通过innodb_page_size将页的默认大小设置为4K、8K、18K。
常见的页类型有:
- 数据页
- undo页
- 系统页
- 事务数据页
- 插入缓冲位图页
- 插入缓冲空闲列表页
- 未压缩的二进制大对象页
- 压缩的二进制大对象页
5 行
InnoDB中的数据是按行存放的,每个页中最多允许存放16KB / 2 – 200行,也就是7992行记录。
特此声明:本系列博客为均为《MySql技术内幕 InnoDb存储引擎》读书笔记,存在错误还请指正
参考资料
《MySql技术内幕 InnoDb存储引擎》