📜  合并联接算法

📅  最后修改于: 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索引的叶条目合并。然后,结果文件将携带来自已排序关系的元组和未排序关系的元组的地址。此外,将结果文件再次按未排序关系的元组的地址排序,以使有效元组的有效检索能够完成物理存储序列中的连接。这种类型的方法称为“混合合并联接”方法。