(十四)大白话磁盘文件中, 40个bit位的数据头以及真实数据是如何存储的?

1、前情回顾

之前我们已经给大家讲到了在磁盘上存储数据的时候,

  • 每一行数据都会有变长字段长度列表,逆序存放这行数据里的变长字段的长度,
  • 然后会有NULL值列表,对于允许为NULL的字段都会有一个bit位标识那个字段是否为NULL,也是逆序排列的。

今天我们接着给大家讲每一行数据存储的时候,还得有40个bit位的数据头,这个数据头是用来描述这行数据的。
在这里插入图片描述

2、详解40个bit位数据头

这40个bit位里,每个bit位具体含义如下图,下面会详解。

在这里插入图片描述

  • 1个bit位和第2个bit位,都是预留位,是没任何含义的。

  • 然后接下来第3个bit位是delete_mask,他标识的是这行数据是否被删除了,其实看到这个bit位,很多人可能已经反映过来了,这么说在MySQL里删除一行数据的时候,未必是立马把他从磁盘上清理掉,而是给他在数据头里搞1个bit标记他已经被删了?没错,其实大家现在看这些数据头,只要先留有一个印象就可以了,知道每一行数据都有一些数据头,不同的数据头都是用来描述这行数据的一些状态和附加信息的。

  • 然后第4个bit位是min_rec_mask,这个bit位大家现在先不用去关注,他的含义以后我们讲到对应的内容的时候再说,他其实就是说在B+树里每一层的非叶子节点里的最小值都有这个标记。

  • 接下来有4个bit位是n_owned,这个暂时我们也先不用去管他,他其实就是记录了一个记录数,这个记录数的作用,后续我们讲到对应的概念时会告诉大家的。

  • 接着有13个bit位是heap_no,他代表的是当前这行数据在记录堆里的位置,现在大家可能也很难去理解他,这些概念都要结合后续的一些内容才能理解的,这里只能是初步的给大家介绍下。

  • 然后是3个bit位的record_type,是说这行数据的类型。0代表的是普通类型,1代表的是B+树非叶子节点,2代表的是最小值数据,3代表的是最大值数据。很多朋友可能也不理解这些什么意思,其实我们也现在不用在乎他,因为很多这些概念都是往后在讲解索引之类的技术的时候才会涉及到的。

  • 最后是16个bit的next_record,这个是指向他下一条数据的指针

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值