📅  最后修改于: 2020-12-12 08:15:12             🧑  作者: Mango
合并联接用于执行给定关系r和s的自然联接和等联接。我们使用一种用于执行合并联接的算法,称为“合并联接算法” 。也称为排序合并联接算法。
合并联接算法如下:
在算法中,使用了各种术语:
JoinAttrs:它表示r s的交集中的属性。
r s: r s指关系r和s中共有的那些属性。
t s t r : t s和t r元组的属性的级联表达式。进一步地,计划出重复的属性。
t s和t r :这是两个具有相同JoinJotrs值的元组。
S s :它读取一组具有相同值的关系元组的联接属性。
在合并联接算法中,它将每个关系与一个指针相关联。最初,指针指向该关系的第一个元组,然后在算法进行时立即移向下一个元组。此外,即使关系s的大小很大,该算法也需要将每个元组集合S s都放入内存中。但是,如果一些属性值,šš似乎比可用内存大小,我们可以执行块嵌套循环连接它。不知何故,如果给定的输入关系r和s没有在连接属性上排序,或者任何人都未排序,我们需要在应用合并连接算法之前对它们进行排序。
如果对关系进行排序,并且对join属性具有相同值的元组进行连续放置。然后我们只需要读取每个元组一次,因此该块也将被读取一次。从而,
块传输次数= b r + b s
同样,在两个文件中,块传输的数量均相等。
磁盘搜寻数= [b r / b b ] + [b s / b b ]
在此,b r和b s是给定关系r和s的块数。术语b b表示我们假设将b b个缓冲块分配给两种关系。但是,我们知道数据传输比磁盘搜索便宜,因此我们应该为每个给定关系分配多个块。因此,它也将提供额外的存储空间。
混合合并联接不同于合并联接。在合并联接操作中,我们看到必须应用合并联接技术对给定的关系进行排序。但是,两个联接属性都包含二级索引,因此我们也可以对未排序的元组执行合并联接操作的变体。为此,应用的合并联接算法将通过索引扫描记录,这将使您能够以排序的方式检索记录。因此,合并联接操作的这种变化会导致明显的缺陷,即:
为了防止自己遭受如此昂贵的访问,我们使用一种称为“混合合并联接”技术的新技术。混合合并联接操作将索引与合并联接组合在一起。
为了理解混合合并联接操作,让我们举个例子:
考虑一下,我们有两个关系,其中一个关系是从中排序的,而另一个是未排序的。但是未排序的关系在连接属性上包含次要的B +树索引。
在这种情况下,最初,混合合并联接过程将合并排序的关系或将其与次级B + -tree索引的叶条目合并。然后,结果文件将携带来自已排序关系的元组和未排序关系的元组的地址。此外,将结果文件再次按未排序关系的元组的地址排序,以使有效元组的有效检索能够完成物理存储序列中的连接。这种类型的方法称为“混合合并联接”方法。