InnoDB(三):InnoDB表的逻辑和物理存储

1. InnoDB逻辑存储结构

    所有的数据都被放在一个空间中,这个空间称为表空间(table space),表空间又由段(segmet)、区(extent)和页(page)组成,如下图所示。

InnoDB(三):InnoDB表的逻辑和物理存储

(1)表空间(table space)

    表空间是存储引擎的最高层,所有的数据都存放在表空间中。如果没有开启innodb_file_per_table,则所有数据都存放在默认的共享表空间中,如果开启这个参数,那么,每张表的数据可以单独放到一个表空间中。表空间就是存放表的地方,它可以是一个物理文件,也可以是多个物理文件的集合,可以通过参数innodb_data_file_path进行设置。

(2)段(segment)

    由于InnoDB存粗引擎是索引组织的,因此数据即索引,索引即数据。B+树的叶子节点即为数据段,B+树的非叶子节点即为索引段,除了数据段和索引段之外,表空间还包含回滚段。

(3)区(extent)

    一个段通常由多个区组成,每个区大小固定为1MB,为了保证页的连续性,InnoDB存储引擎一次从磁盘申请4~5个区。

(4)页(page)

    区由页组成,默认情况下,InnoDB存储引擎的页大小为16KB,因此一个区由64个连续的页组成,页是InnoDB磁盘管理的最小单位。

    InnoDB1.0.x版本引入了压缩页,即每个页的大小可以通过参数KEY_BLOCK_SIZE设置为2K、4K、8K,因此每个区对应页的数量就应该为512、256、128.

    InnoDB1.2.x版本新增了参数innodb_page_size,通过该参数可以将默认页的大小设置为4K,8K,但是页中的数据是不压缩的,这时区的数量同样也为256,128,总之,不论页的大小怎么变化,区的大小总是为1MB。

    在InnoDB存储引擎中,常见的页类型有:

  • 数据页
  • undo页
  • 系统页
  • 事务数据页
  • 插入缓冲位图页
  • 插入缓冲空闲列表页
  • 未压缩的二进制大对象页
  • 压缩的二进制大对象页

(5)行(row)

     InnoDB的数据是按行进行存储的,每个页存放的行记录也是有硬性规定的,最多允许存放16K/2 - 200 = 7992行记录。

2. InnoDB行记录格式

// todo

3. InnoDB数据页结构

// todo

4. 约束

// todo

5. 视图

// todo

6. 分区表

// todo

上一篇:Mysql数据库(五)—事务及引擎


下一篇:索引和锁