mysql页结构_InnoDB 页结构

页是MySQL管理存储空间的基本单位,一个页的大小一般是16KB,记录是被存放在页中的,如果记录占用的空间太大还可能造成行溢出现象,这会导致一条记录被分散存储在多个页中。

页的本质就是一块16KB大小的存储空间,InnoDB为了不同的目的而把页分为不同的类型,其中用于存放记录的页也称为数据页,我们先看看这个用于存放记录的页长什么样。数据页代表的这块16KB大小的存储空间可以被划分为多个部分,不同部分有不同的功能,各个部分如图所示:

6856d6178d4ae039b3124ebaada05a34.png

3e5ceb296e44a994a630dbe69a362a0d.png

记录在页中的存储

在页的7个组成部分中,存储的记录会按照指定的行格式存储到User Records部分。但是在一开始生成页的时候,其实并没有User Records这个部分,每当插入一条记录,都会从Free Space部分,也就是尚未使用的存储空间中申请一个记录大小的空间划分到User Records部分,当Free Space部分的空间全部被User Records部分替代掉之后,也就意味着这个页使用完了,如果还有新的记录插入的话,就需要去申请新的页了,这个过程的图示如下:

fa0ba7a13180038cd8d620d1cb91a8e8.png

记录头信息的秘密

d6a0ec0d99ef3033959f8c117a95a4d4.png

delete_mask 这个属性标记着当前记录是否被删除,占用1个二进制位,值为0的时候代表记录并没有被删除,为1的时候代表记录被删除掉了。

这些被删除的记录之所以不立即从磁盘上移除,是因为移除它们之后把其他的记录在磁盘上重新排列需要性能消耗,所以只是打个删除

标记而已,而且这部分存储空间之后还可以重用,也就是说之后如果有新记录插入到表中的话,可能把这些被删除的记录占用的存储空

间覆盖掉。`optimize table 表名;` 执行这个命令后服务器会重新规划表中记录的存储方式,把被标记为删除的记录从磁盘上移除。

min_rec_mask 这个属性标记该记录是否为B+树的非叶子节点中的最小记录。

n_owned 这个暂时保密,稍后它是主角~

heap_no 这个属性表示当前记录在本页中的位置。InnoDB自动给每个页里加了两个记录,由于这两个记录并不是自己插入的,所以有时候也称为伪记录或者虚拟记录。这两个伪记录一个代表最小记录,一个代表最大记录。对于一条完整的记录来说,比较记录的大小就是比较主键的大小。比方说插入的4行记录的主键值分别是:1、2、3、4,这也

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值