Sorting & Aggregations Algorithms
本节课主要介绍的是数据库系统中的排序算法以及聚合算法
Sorting
排序算法分为两种:如果内存能够容纳一个关系的所有tuple,那么可以用任意的标准排序算法在内存中进行排序,如插入排序、快速排序等等;如果内存无法容纳一个关系的所有tuple,则只能使用外排序。
Top-N Heap Sort
如果一个查询包含ORDER BY加上LIMIT关键字的组合,则可以使用Top-N堆排序的做法,如下图所示,推排序的细节就不多讲了。

External Merge Sort
一种外排序算法是外部归并排序,主要分为以下两个步骤:
- Divide:将文件中的记录分为若干个归并段,使得每个归并段都能被加载到内存中进行单独排序
- Conquer:将若干个有序的归并段merge成最终结果
2-WAY External Merge Sort
一个简单的merge做法是二路归并,如下图例子所示,每次merge合并两个归并段,以此类推直到所有归并段合成一个段为止。在二路归并做法中,只需要内存提供三个缓存页(两个用于加载待merge的归并段,一个用于存放merge结果)。我们可以简单的估计该做法的IO复杂度,假设存放tuple的page数量为 N N N,则我们最多需要做 ⌈ l o g 2 N ⌉ \lceil log_2N \rceil ⌈log2N⌉次归并,且每次归并需要对每个page进行读写,共计 2 N 2N 2N次IO操作,故总复杂度为 2 N ∗ ( 1 + ⌈ l o g 2 N ⌉ ) 2N*(1+\lceil log_2N \rceil) 2N∗

本文介绍了数据库系统中的排序算法(如Top-N堆排序、外部归并排序和K-WAY优化)及聚合算法(基于排序和哈希),重点讨论了内存优化策略,如双缓冲和哈希分区。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



