数据库学习的一天(10)

第十九讲 查询实现算法

1.过程:sql->关系模式的运算的各种组合->DBMS的解释与调用

2.三大类操作:

3.各类参数:

4.连接操作的实现算法:①-④表空间扫描法

①最笨的:逐个块存入,然后进行连接,每次在内存里的只有三个块  基本实现方法

②稍微聪明的:将两个关系完全放进内存里,然后再做连接    全主存

③稍微聪明的:将其中一个放得下的关系完全放进内存里,另一个关系逐块放入,再做连接

④无可奈何的:将其中一个关系都拆分成最大能放进的子集,即M-2,然后另一个关系逐个存入,结束再下一个子集

5.迭代器算法:用于解决单一元组的一元操作

分为open函数,GetNext函数,close函数,而且上层的迭代器可以调用下层的迭代器

6.一趟扫描算法:

7.连接操作的优化:

 

讲条件转化为散列值的匹配

8.基于索引的选择算法:

由于索引文件位于内存,比较其磁盘的存取时间,内存的访问时间简直可以忽略不计,

分析:当有聚簇的情况下,需要搜索的块数,用记录数/块的容量即可,当有索引的时候,就不用了将整条记录放入内存,根据索引找到相应的记录,再存入内存,所以时间上只要算条件合适的记录数、

错题分析:

分析:能一趟实现的只有包的并操作,无脑的扫描并且输出即可

分析:open之后获得一个r,调用getnext会扫描s,若有相同则输出,当没有换一个,再重新搜索s

分析:A。要求M必须大于非重复元组所占的磁盘块数,才能执行   B.散列和排序皆可以满足快速比较,使用方法hash,二分

c。hash之后只会对应一个内存块,仅跟它比较即可  D.一边扫描一边建立即可

分析:本题为寻找不正确的:A。分组必然要全部放在内存里,正确,  B.排序和散列都是为了方便比较  c。进行hash后只需跟少数的内存块计算  D.分组聚集应当在开始之前就建立好数据结构

第二十讲

1.多趟扫描:由于有些时候,需要操作的元组数目过大,所以需要通过排序或者散列或者索引先处理一部分块,然后存进磁盘,然后再将处理好的子表逐个块拿出来,操作

2.多路归并算法:

如果总的元组个数的超过了内存的平方,那么我们需要多趟归并

3.关于包和集合的∪,∩,差操作:

集合并:则是需要去重,需要在比较的时候,顺便去除重复的部分

包并:全部排序后,直接输出即可

集合交:需要去重,在两个集合中都有出现,则又一次

包交:则是两个包中出现次数的最小值

集合差:即R中元组在R,S中同时出现,则不会出现

包差:即元组在R中出现的次数-S中出现的次数

4.基于散列:

也是差不多的逻辑,先通过一个散列函数将将所有的元组分成M个集合,那么会出现匹配的就会在各自的集合中,在选用另一种散列函数对集合中的元素进行处理,然后实现去重,分组,并,交,差

错题分析:

分析:如何才能获得最优的归并操作呢?其实内存有100块,那么我们归并,就希望有99个集合,那么10000块能分成100个集合,然后将其中两个归并成一个,再用这个和余下的98个

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值