结构推理
假设外存的页块大小为4000字节(实际也许是4096字节,为了计算的方便,就取成4000字节),指向外存的地址指针需要5字节。现在有一个由20×106条记录构成的文件,每条记录为200字节,其中包括关键码5字节。
问:如果采用B+树结构的索引文件存储,应该设计为多少阶的B+树?索引部分需要占用多少外存的页块?如果所有记录已经按照关键码排序,每个记录的检索概率相同。找到一个需要的记录平均需要访问外存多少次?
【正确答案】(1)计算B+树的阶数
根据B+树的概念,B+树的一个结点最大不应该超过外存的一个页块。假设B+树为m阶,一个B+树的结点中最多存放m个关键码和对应的记录地址,根据假设,每个关键码和指针的长度都为5个字节,所以:
2×m×5≤4000
计算结果为B+树的阶数最大为400。
(2)计算B+树的高度
假设用B+树建立的是稀疏索引——也就是说,每个索引相对应顺序文件中的一个页块。
现有20×106条记录每条记录为200字节,共计4000×106字节,因题目假设页块大小为4000字节,所以正好需要存放在106个页块中。
用400阶B+树建立索引,各层的关键码分布为:
0层的关键码最多为n0=400;
1层的关键码最多为n1=4002;
2层的关键码最多为n2=4003;
因为n1<106<n2,所以B+树的高度至少为2。
0层的关键码最少为n0=200;
1层的关键码最少为n1=2002;
2层的关键码最少为n2=2003;
因为n1<106<n2,所以B+树的高度至多为2。
结论为:B+树的高度为2。
(3)B+树索引部分的空间开销
每个页块最少存放200个关键码,所以最多需要106/200=5000个页决。
每块最多存放400个关键码,所以最少需要106/400=2500个页块。
(4)查询记录需要的访问次数
首先在B+树中检索:访问外存3次就能够确定记录的地址,如果需要取出被查询的记录,还需要根据查询得到的地址再访问外存一次。
【答案解析】