DB - 查询处理 - 索引嵌套循环连接

时间:2012-01-10 15:56:46

标签: database

我有10个块的关系R. S有1000 我在关系R中也有50个属性A的唯一记录,在关系S中有属性A的5000个唯一记录。 我在每个街区都有100条记录。 请注意,我们假设每个关系中的不同值均匀分布。 S在连接属性A上有一个clustring索引。

问题是:S中有多少块存储了与R一起参与连接的任何记录。我需要回答最好和最坏的情况。

我认为如果R有50个A及其聚类索引的唯一记录,则每个唯一且最多2个最少需要1个块,然后答案为50或100。

但是,为什么我不能在每个块中放入5个唯一记录,因此最大块数为10?

1 个答案:

答案 0 :(得分:1)

据我所知,情况就是这样:

S有1000个块,有100个记录/块,这导致100000条记录(最大值)。其中100000条记录是属性A的5000个唯一(不同)值。

修改

如果它们均匀分布,则A的每个唯一值在S中将有20行。如果S中存在A中的A的所有50个唯一值,则将获取50个行组。

在最好的情况下,所有存储在一起(由于聚集索引),您需要读取10个块。 [(A * 20行的50个值,每个块的S / 100记录中具有相同的值= 10个块)

在最坏的情况下,A中每个值的20行使用2个块。这将导致您需要从S中读取100个块。

关于你的第二个问题:

由于您有一个包含A列的聚簇索引,因此A的所有相同值都将存储在一起。如果它们不适合一个块,或者块被其他值填充,则它们只使用多个块,因此不能适合一个块。

注意:我可能没有完全理解你的初步问题,因此我的回答可能完全错误!