第20讲——两趟扫描算法

 

数据库查询算法(2)

第20讲——两趟扫描算法

目录

 

数据库查询算法(2)

第20讲——两趟扫描算法

1.两阶段多路归并排序

2. 基于排序的两趟扫描算法

2.1 去重复操作

2.2 分组聚焦

2.3 集合的并、交、和、差

2.4 基于排序的连接运算

3. 基于散列的两趟扫描算法

3.1去重复操作

3.2 分组聚焦操作

3.3 基于散列的并、交、差操作

3.4 基于散列的连接操作

 


两趟算法的思路:

  1. 第一趟:划分子集,并使子集具有某种特性,如有序或相同散列值等
  2. 第二趟:处理全局性内容的操作,形成结果关系。如多子集间的归并排序,相同散列值子集的操作等

大数据集上的操作可否等于(子集上操作)的并集?

         例如:元组在某一子集上无重复,相当于在全集上无重复

多个已经按横向处理的结果,纵向归并结果等同于在全集上的处理结果?

         例如:多个已排序的子集,纵向归并的结果等同于全集上的排序结果,

                  多个已排序的子集,纵向归并处理的无重复即等同于全集上的无重复

 

1.两阶段多路归并排序

外排序问题:待排序的数据不能一次性装入内存,即排序者不能一次完整地看到和操纵所有数据,需要将数据分批装入内存分批处理的排序问题;

解决思路:①多块待排序的数据可划分为N个子集合,使每个子集合的块数小于内存可用块数每个子集合都可装入内存并采用内排序算法排好序并重新写回磁盘

                ②对各个已经排序好的子集采用多路归并排序,在内存中留出一块用于将已经排序好的子集写回磁盘

算法复杂度:3B(R)  [不考虑最终结果的写回]

                   4B(R)  [考虑最终结果的写回]

2. 基于排序的两趟扫描算法

2.1 去重复操作

  1. ●第一趟:划分子表,并进行子表排序
  2. ●第二趟:归并阶段,在排序的基础上,直接将重复的记录剔出掉-不输出
  3. ●算法的复杂性:同TPMMS: 3B(R)---不考虑输出;4B(R)---考虑输出。

 

2.2 分组聚焦

  1. 第一趟:划分子表,并进行子表排序
  2. 第二趟:归并阶段,在排序基础上,将不重复的记录,作为新分组输出;将重复的记录进行分组聚集计算。
  3. 算法的复杂性,同TPMMS: 3B(R)---不考虑输出;4B(R)---考虑输出。

 

2.3 集合的并、交、和、差

2.4 基于排序的连接运算

3. 基于散列的两趟扫描算法

基本思想:

  1. 第一趟:散列子表。用散列函数h,将原始关系划分成M-1个子表,并存储
  2. 第二趟:处理每个子表用另一散列函数h,将子表读入内存并建立内存结构,进行不同操作的处理

3.1去重复操作

3.2 分组聚焦操作

3.3 基于散列的并、交、差操作

 

3.4 基于散列的连接操作

 

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值