数据库查询算法(2)
第20讲——两趟扫描算法
目录
两趟算法的思路:
- 第一趟:划分子集,并使子集具有某种特性,如有序或相同散列值等
- 第二趟:处理全局性内容的操作,形成结果关系。如多子集间的归并排序,相同散列值子集的操作等
大数据集上的操作可否等于(子集上操作)的并集?
例如:元组在某一子集上无重复,相当于在全集上无重复,
多个已经按横向处理的结果,纵向归并结果等同于在全集上的处理结果?
例如:多个已排序的子集,纵向归并的结果等同于全集上的排序结果,
多个已排序的子集,纵向归并处理的无重复即等同于全集上的无重复
1.两阶段多路归并排序
外排序问题:待排序的数据不能一次性装入内存,即排序者不能一次完整地看到和操纵所有数据,需要将数据分批装入内存分批处理的排序问题;
解决思路:①多块待排序的数据可划分为N个子集合,使每个子集合的块数小于内存可用块数。每个子集合都可装入内存并采用内排序算法排好序并重新写回磁盘。
②对各个已经排序好的子集采用多路归并排序,在内存中留出一块用于将已经排序好的子集写回磁盘。
算法复杂度:3B(R) [不考虑最终结果的写回]
4B(R) [考虑最终结果的写回]
2. 基于排序的两趟扫描算法
2.1 去重复操作
- ●第一趟:划分子表,并进行子表排序
- ●第二趟:归并阶段,在排序的基础上,直接将重复的记录剔出掉-不输出
- ●算法的复杂性:同TPMMS: 3B(R)---不考虑输出;4B(R)---考虑输出。
2.2 分组聚焦
- ●第一趟:划分子表,并进行子表排序
- ●第二趟:归并阶段,在排序基础上,将不重复的记录,作为新分组输出;将重复的记录进行分组聚集计算。
- ●算法的复杂性,同TPMMS: 3B(R)---不考虑输出;4B(R)---考虑输出。
2.3 集合的并、交、和、差
2.4 基于排序的连接运算
3. 基于散列的两趟扫描算法
基本思想:
- 第一趟:散列子表。用散列函数h,将原始关系划分成M-1个子表,并存储
- 第二趟:处理每个子表用另一散列函数h,将子表读入内存并建立内存结构,进行不同操作的处理
3.1去重复操作
3.2 分组聚焦操作
3.3 基于散列的并、交、差操作
3.4 基于散列的连接操作