InnoDB存储引擎:表
表就是关于特定实体的数据集合。
索引组织表
根据主键顺序组织存放——索引组织表
每一张表都有自己的主键,如果没有定义主键,则InnoDB存储引擎会按如下方法选择或创建主键:
– 先判断表中是否有非空唯一索引,有,则为主键。如果存在多个非空唯一索引,InnoDB则将按定义索引的顺序选择主键,而非建表时的列顺序。
– 没有,InnoDB存储引擎会自动创建一个6字节大小的指针。InnoDB逻辑存储结构
数据存在表空间,表空间由段(segment)、区(extent)、页(page)组成,如下图:
– 表空间
– 段
表空间由各个段组成,常见的段有数据段、索引段、回滚段等。
– 区
区由连续的页组成。区的大小为1M。每个页为16K,因此一个区由64个连续的页。
– 页
InnoDB磁盘管理的最小单位,默认为16K,可压缩到4K、8K、16K。InnoDB行记录格式
记录以行的形式存储,即页中的行保存着表中的一行行数据。
– Compact行纪录格式(需详细了解)
– Redundant行记录格式(不做深究)
– 行溢出数据数据页结构
InnoDB数据页由以下部分组成:
file header(文件头)(38字节)
page header(页头)(56字节)
infimun和supremum record
user record(用户记录,即行记录)
free space(空闲空间)
page directory(页目录)
file trailer(文件结尾信息)(8字节)
以上整理自《MySQL技术内幕:InnoDB存储引擎》