📜  门| GATE IT 2006 |第86章

📅  最后修改于: 2021-06-28 20:51:43             🧑  作者: Mango

考虑一个具有以下所示的三个关系实例的数据库。驾驶员和汽车关系的主键分别是do和cid,并且记录以这些主键的升序存储,如表中所示。数据库中没有索引可用。

2006_84_85

2006_84_85_2
2006_84_85_3
令n为最佳执行上述SQL查询时执行的比较次数。如果使用线性搜索使用主键在关系中定位元组,则n位于范围内
(A) 36 – 40
(B) 44 – 48
(C) 60 – 64
(D) 100 – 104答案: (B)
解释:

在这里,我们必须计算最佳执行上述SQL查询时执行的比较次数。

从第一个内部查询:

从Cars C,Reserves R中选择R.did
其中R.cid = C.cid和C.colour =’红色’

C.color =“红色”,比较= 4(汽车有四行)

R.cid = C.cid,因此有五行提取到此where条件。
比较=(2辆红色汽车* 10个备用行)= 20

从第二个内部查询中:
从Cars C,Reserves R中选择R.did
其中R.cid = C.cid和C.colour =’绿色’

C.color =“绿色”,比较= 4(汽车有四行)

R.cid = C.cid,因此有三行提取到此where条件。
比较=(1辆绿色轿车* 10个备用行)= 10

R.did = {22,22,31,31,64}用于第一个内部查询
R.did = {22,31,74}用于第二个内部查询

在这里,唯一集合分别是第一和第二个内部查询的R.did = {22,31,64}和R.did = {22,31,74}。
因此对于交集,有6个比较(对于22,我们第一次尝试,对于31,我们第二次尝试,对于74,我们所有三个尝试都命中,所以comaprisons = 1 + 2 + 3)
最后,我们必须从驱动程序表中找到do – 22和do 31,并且do是主键。如问题所述,我们使用线性搜索,对于22,
我们进行了第一次尝试,然后进行了31次尝试了第三次。因此,1 + 3 = 4个比较。
因此比较总数= 4 + 20 + 4 + 10 + 6 + 4 = 48
因此,B是答案。

简而言之:因此,首先通过扫描汽车关系的4个元组来获得2辆红色汽车。现在,对于两个“红色”汽车中的每一个,我们扫描“储备”关系的所有10个元组,因此我们得到2 * 10 + 4 = 24个比较。同样,对于“绿色”汽车我们得到4 + 10 = 14个比较。

此解决方案由Nitika Bansal提供
这个问题的测验