InnoDB逻辑存储结构
表空间结构
《MySQL技术内幕-InnoDB存储引擎(第二版)》

从逻辑上看,所有数据都存储在表空间(Tablespace),物理上就是idb文件。
表空间又可以逐级细分为:段(Segment),区(Extent),页(Page),行(Row)。
- 表空间(
Tablespace)
所有数据存放的逻辑最高层次。 - 段(
Segment) 表空间由各个段组成,常见的有数据段、索引段、回滚段。InnoDB是索引组织表,数据段就是聚集索引B+树的叶子节点,索引段就是非叶子节点。 - 区(
Extent) 每个区大小是1MB,默认情况下页的大小是16KB,那么一个区中就包含64个连续的页。为保证页的连续性,一般一次从磁盘申请4到5个区。 -
页(
Page)
页是InnoDB管理的最小单位,默认16KB,包括数据页、undo页、系统页等。 - 行(
Row) InnoDB是以行为基础管理数据的。也就是数据按行存放的。每一页存储的行记录是有限制的,最多16K/2-200行记录,也就是7992行。
索引结构
InnoDB是索引组织表,主键索引B+树的叶子节点存储数据,非主键索引B+树叶子节点存储主键,因此通过非主键索引查询,需要先找到主键,然后回表通过主键索引查到数据。
宏观来看主键索引与非主键索引:

微观来看主键索引树的page:

