Page-页

描述

  1. 为了避免一条一条读取磁盘数据,InnoDB采取页的方式,作为磁盘和内存之间交互的基本单位,从而提高mysql的性能。
  2. 一个页的大小一般是16KB。
  3. InnoDB为了不同的目的而设计了多种不同类型的页,比如:存放表空间头部信息的页、存放undo日志信息的页等等。我们把存放表中数据记录的页,称为索引页or数据页。

InnoDB数据页结构

mysql 页 16 kb和磁盘 4kb不一致 mysql innodb page size_数据库

往数据页中存储数据(也叫“记录”)

mysql 页 16 kb和磁盘 4kb不一致 mysql innodb page size_数据库_02

记录结构

mysql 页 16 kb和磁盘 4kb不一致 mysql innodb page size_mysql_03


delete-flag:0是未删除,1是已删除

min-rec-flag:在B+树当中只有非叶子节点的时候才会被标记

n_owned:只有在组里面排最后一条记录的时候,这条记录的n_owned才会被维护,n_owned是组的数量。

heap_no:页面堆的相对位置

record_type:记录类型

  1. 0:普通类型
  2. 1:B+树当中非叶子节点的目录项记录
  3. 2:数据页当中的最小记录
  4. 3:数据页当中的最大记录

next-record:指向下一条记录

删除记录操作对next_record的影响

mysql 页 16 kb和磁盘 4kb不一致 mysql innodb page size_mysql_04


Innodb的删除记录操作,

  1. n_owned在会减1,反之增加一条记录会加1
  2. 被删除的记录delele_flag会标记为1
  3. heap_no在初始化页的时候就标记好了不会进行改变
  4. min_rec_flag这里都是叶子节点所有不会被维护都是0
  5. 删除一条记录之后该记录的头节点会指向该记录的下一个节点

Page Directory——记录在页中的展现(页目录)

mysql 页 16 kb和磁盘 4kb不一致 mysql innodb page size_数据_05

  1. infmum单独一条记录为一组
  2. supremum这组记录可以是1-8条记录
  3. 剩下的分组中记录的条数范围只能在是 4~8 条之间

页满后的插入操作

mysql 页 16 kb和磁盘 4kb不一致 mysql innodb page size_mysql_06


当页插满之后,会重新申请一个页把,记录迁移到新的页当中去

B树和B+树的区别(阶数=5)

mysql 页 16 kb和磁盘 4kb不一致 mysql innodb page size_数据库_07


mysql 页 16 kb和磁盘 4kb不一致 mysql innodb page size_数据库_08