插入记录流程如下所示:
每一个链表的头节点和尾节点以及这个链表中包含了多少个节点的信息被记录在一个叫List Base Node链表基节点的结构中,占用16个字节。
碎片区中的链表基节点存放在FSP_HDR页中的File Space Header中,附属于段的链表基节点存放在INODE Entry结构中。
什么是INODE Entry
第一个分组中第三个页面的类型是INODE,其结构如下:
List Node for INODE Page List为前一个INODE页和后一个INODE页的指针,每个段对应的INODE Entry结构会急中存放在INODE页中,每个INODE Entry占用192字节,一个INODE页可以存放85个INODE Entry结构。如果表中索引特别多,每个索引对应两个段,所以一个INODE页不够用,就会使用多个INODE页来进行存储。这些INODE页会形成两个链表。
为了知道某个段对应哪个INODE Entry结构,在段中的记录所在的页,也就是INDEX页Page Header部分有这样两个属性:
名称大小描述PAGE_BTR_SEG_LEAF10字节B+树叶子节点段段头部信息,仅在B+树段根页中定义PAGE_BTR_SEG_TOP10字节B+树非叶子节点段的头部信息,仅在B+树的根页中定义这10个字节对应的是一个Segment Header结构:
名称大小描述Space ID for INODE Entry4字节INODE Entry结构所在的表空间IDPage Number of the INODE Entry4字节INODE Entry结构所在的页面页号Byte Offset of the INODE Entry2字节INODE Entry结构在该页中偏移量这样,PAGE_BTR_SEG_LEAF记录着叶子节点段对应的INODE Entry结构的地址,PAGE_BTR_SEG_TOP记录着非叶子节点对应的INODE Entry结构的地址。一个索引值对应两个段,所在只需要在索引的根页面记录这两个结构即可。