三、表

135 阅读2分钟

一、索引组织表

  在 InnoDB 存储引擎中,表都是根据主键顺序组织存放的,称为索引组织表。在存储引擎表中,每张表都有个主键,如果没有显示定义主键,则 InnDB 会按如下方式选择或创建主键:

  • 判断表中是否有非空唯一索引(单列),如有,则该列即为主键,如有多个则选择第一个定义的。
  • 如果没有,则自动创建一个6字节大小的指针。

二、InnDB 逻辑存储结构

  从逻辑存储结构看,所有数据都被逻辑地存放在一个空间中,称之为表空间。表空间又由段(segment)、区(extent)、页(page)组成

image.png

2.1 表空间

  用于存放数据、索引和插入缓冲 Bitmap 页, 表空间只会增大,不会收缩。

2.2 段

  表空间是由各个段组成的,常见的段有数据段、索引段、回滚段等。数据段即为B+树的叶子节点,索引段即为B+树的非索引节点。

2.3 区

  区是由连续页组成的空间,大小为1MB,为保证区中页的连续性,InnDB一次从磁盘申请4~5个区。默认情况下,InnDB存储的引擎页的大小为16K,一个区中一共有64个连续的页。

2.4 页(即块)

  页是 InnoDB 磁盘管理的最小单位,默认大小为16KB
常见的页类型有:数据页、undo页、系统页、事务数据页、插入缓冲位图页、插入缓冲空闲列表页、未压缩的二进制大对象页、压缩的二进制大对象页。

2.5 行

  InnoDB 存储引擎是面向列的,也就是说数据是按行进行存放的。每个页存放的行记录最多允许存放 16KB / 2 - 200 行的记录, 即 7992 行。