InnoDB
存储的核心逻辑存储及实现,以表结构为核心,下面着重分析分析表的物理存储特征
一、索引组织
表的数据以主键顺序存放的,这种存储方式称之为索引组织表,在
InnoDB中,每张表有一个主键(primary key),如果没有显示的定义主键,则存储引擎会根据以下条件自动的创建主键,(1)如果存在非空唯一索引,则采用该列作为主键,(2)如果不存在唯一索引,InnoDB会自动的创建一个6字节指针作为主键。 如果存在多个非空唯一索引,则采用第一个定义的非空唯一索引, 建立索引的列需要非空,否则索引失效。二、逻辑存储结构
所有的数据逻辑地存储在一个表空间空中,称之为表空间,表空间由段
(segment),区(extent),页(page);1. 表空间
默认采用一个共享表空间
ibdata1, 如果启用了innodb_file_per_table,则每张表内的数据可以单独的存放。如果启用了独立表空间,每张表空间只存放了数据、索引、数据缓冲页。其他类的数据,仍然存在共享表空间中,如回滚信息,插入缓冲索引也、系统事务信息、二次写缓冲。2. 段
常见的段有数据段、索引段、回滚段等,存储是按照索引组织的,B+树中,数据段为叶子节点,索引段为非叶子节点。
3. 区
区由连续的页组成,每个区的大小为1MB,保证区中的页是连续的, 每次从磁盘中申请
4-5个区,默认的情况下,每页大小为16KB,一个区为64个连续的页。可以通过innodb_page_size参数设置每个页的大小,4k,8k等,可以自己设置。后续的对区做了一些优化,默认96k, 前32k是不连续的页,后64k是连续的页。
4. 页

存储管理的最小单位,默认是16K