名称 | 中文名 | 占用空间(字节) | 简单描述 |
---|---|---|---|
File Header | 文件头 | 38 | 页的通用信息 |
Page Header | 页面头 | 56 | 数据页专有的信息 |
Infimum + Supremum | 最大、最小记录 | 26 | 两个虚拟的行记录 |
User Records | 用户记录 | 不确定 | 实际存储的行记录内容 |
Free Space | 空闲空间 | 不确定 | 页中尚未使用的空间 |
Page Directory | 页面目录 | 不确定 | 页中的某些记录的相对位置 |
File Trailer | 文件尾 | 8 | 校验页是否完整 |
用户插入的数据会被存储到User Records中,但是在刚创建数据页的时候该部分并不存在,全部都是Free Space,插入的数据不断的占用Free Space的空间。当Free Space也没有空间的时候就会创建新的数据页。
Page Directory将所有的正常的记录分成不同的组,包括infimum和supremum记录,每个组的最后一条数据的n_owned记录本组中有几条数据。将每个组的最后一条数据的在页面内的偏移量单独提取处理存储在靠近页尾的地方,这个地方就是Page Directory。这些地址偏移量称为槽,每个槽占用两个字节。页目录就是多个槽组成的。
分组规则:
(1):infimum单独成一个组。
(2):supremum所在组的数据只能是1~8条。
(3):剩下组的数据只能是4~8条。
按照下面的步骤进行分组:
1:初始情况下只有infimum和supremum两个分组。
2:之后每插入一条记录,都会从页目录中找到对应记录的主键值比待插入记录的主键值大并且差值最小的槽,然后把该槽对应的n_owned加一,直到记录数等于8。
3:当一个组中的记录数等于8时,再插入一条记录就会将组中的记录拆成两个组,其中一个组中的数据记录是4条,两外一个组中的记录数是5条。拆分过程中会增加一个槽,
查找数据:
(1):首先使用二分法找到对应的组。
(2):然后组内根据next_record顺序查找。
状态名称 | 占用空间大小 | 描述 |
---|---|---|
page_n_dir_slots | 2 | 在页目录中的槽数量 |
page_heap_top | 2 | 还未使用的空间的最小值,free space的起始地址 |
page_n_heap | 2 | 第一位表示记录是否为紧凑型,剩余的15位表示本页中记录的堆中记录的数量 |
page_free | 2 | 该删除链表的头节点的偏移量 |
page_garbage | 2 | 已删除记录中占用的字节数 |
page_last_insert | 2 | 最后插入记录的位置 |
page_direction | 2 | 记录插入的方向 |
page_n_direction | 2 | 一个方向连续插入记录的数量 |
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)