Mysql学习记录 | 第二篇:InnoDB行存储格式(compact)之记录头信息

记录头信息

出了可变长度和BULL值列表,还有一个用于描述行的记录头信息。它由固定的5个字节组成,5个字节也就是40个二进制位,不同的二进制位代表不同的含义(和接下来的数据索引时相连非常紧密):

delete_mask:  占用1 bit,标识该记录是否被删除

min_rec_mask: 占用1 bit,标识该记录是否为B+树的非叶子节点中的最小记录

n_owned: 占用4 bit,标识当前槽管理的记录数

heap_no: 占用13 bit,标识当前记录在记录堆的位置信息(0和1被最小值和最大值占用)

record_type: 占用3 bit,0表示普通记录,1表示B+数非叶子节点记录,2表示最小记录,3表示最大记录

next_record: 它表示当前记录的真实数据下一条记录的真实数据的的地址偏移量。比方说说第一条记录的next_record值为36,意味着下一条记录的真实数据的地址向后找36个字节便是下一条记录的真实数据。这就是一个链表,可以通过它找到下一条记录。但是需要注意是的:下一条记录指的并不是按照我们插入顺序的下一条记录,而是按照主键由大到小的顺序的下一条记录。而且规定最小记录的下一条记录就是本页中主键值的最小记录,而本页中主键值最大的记录的下一条记录记录的就是最大记录。

预留位1和2:没有使用

从图中可以看出,我们的记录是按照从小到大的顺序形成了一个单链表。最大记录的next_record的值为0,这就是说最大值没有下一条记录,它是单链表中的最后一条记录。

(Mysql服务器会为每条记录都添加transaction_id和roll_pointer这两列,但是row_id只有在表中没有定义主键的时候才会为记录添加,相当于Mysql服务器帮我们来添加一个主键。这些被称为隐藏列)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值