这是“数据库系统完整的书,第2版”一书中的问题 - 第15章:基于排序的双遍算法。 “有时,如果我们将最后一个子列表留在内存中,可以保存一些磁盘I / O.甚至可以使用少于块的子列表来利用这种效果。有多少磁盘I / O' s可以这样保存吗?“
我发现你将原始关系划分为子列表并在第一遍中对它们进行排序,并将最后一个列表保留在内存中,这将占用少于M-1块。那你如何进行排序呢?
答案 0 :(得分:1)
这只是猜测,但我怀疑答案可以描述如下。标准的“一次一级”合并排序如下所示:
1 1 1 1 1 1 1 1
--- --- --- --- -- pass 1
2 2 2 2
----- ----- -- pass 2
4 4
--------- -- pass 3
8
请注意,我们会在进入下一级别之前执行输入数据的完整传递。
另一种选择是“一次子树下”合并排序,如下所示:
1 1 1 1 1 1 1 1
--- | | | | | |
2 --- | | | |
| 2 | | | |
----- | | | |
4 --- | |
| 2 ---
| | 2
| -----
| 4
---------
8
这里,我们将每个子树与其邻居构建后的高度相同。我们做了相同数量的工作,但地点得到了改善。
干杯。