📜  门|门 IT 2006 |第 86 题

📅  最后修改于: 2021-09-24 06:28:38             🧑  作者: Mango

考虑如下所示的具有三个关系实例的数据库。 Drivers 和 Cars 关系的主键分别是 did 和 cid,并且记录按照表中给出的这些主键的升序存储。数据库中没有可用的索引。

2006_84_85

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

这里我们要计算上面SQL查询最优执行时的比较次数。

从第一个内部查询:

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

C.color = “Red”,comparisons=4(汽车有四行)

R.cid=C.cid 所以有五行提取到这个 where 条件。
比较=(2 辆红色汽车 * 10 储备行)=20

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

C.color = “Green”,comparisons=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)
最后,我们必须从驱动程序表中找到did – 22 和did 31,did 是主键。如问题所述,我们使用线性搜索,对于 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 提供
这个问题的测验