我很快就要考试了,我想知道如何解决这些关于索引的问题:
1.数据库由关系 R(A,B,C) 组成。A 和 B 是整数 [0,10 000](每个 4B),C 是 varchar(20) (20B)。关系 R 由 10^6 个元组组成。块大小为 2048 B。
A)如果我们询问这个查询,如果我们在 B 上有一个 B+-tree 索引,我们必须读取多少块(最好和最差):
从 R 中选择 C,其中 A=100 且 B=10
B) 索引 A 有意义吗?如果是,哪种类型的指标最好?
另一个类似的问题是:
2.数据库由关系R(A,B,C)组成。A 和 B 是整数 [0,10 000],C 是 varchar(150)。关系 R 由 10^6 个元组组成。块大小为 2048 B,A、B 是键。
A)如果我们询问查询“ SELECT C FROM R WHERE A=4711 并且:
- 我们没有索引。
- 我们在 A 和 B 上有一个 B+-tree 索引。
b) 单独索引 B 和单独索引 A 是否有意义,而不是在 A 和 B 上设置一个索引。什么类型的索引是最好的?
编辑:
这是我所做的:
问题 1 A)
元组的大小 = 20+4+4=28 B
2048/28=73 元组/块向下舍入
10^6/73= 13 699 个块代表整个关系,向上取整
索引读数:4*n+4(n+1)<=2048 B => n=255 向下舍入
B+树的第一层= 255<10^6 否
B+树的第二层= 255*256<10^6 否
B+树的第三层= 255*256*257>10^6 是的,10^6 个元组可以放入高度为 3 的 B+树。
数据读取:如果我们假设 A=100 的概率为 1/10001,B=10 的概率相同,那么我们有:
1/10001*1/10001*10^6 向上取整 = 1 个元组
在最坏和最好的情况下:1 个元组 = 1 个块
然后我们有 3+1 块读数
这样对吗?
我不知道怎么做B)..
我真的不知道如何回答问题2 ..请帮帮我