1

索引嵌套循环连接:

对于外部关系 R 中的每个元组 tr,使用索引查找 S 中满足与元组 tr 连接条件的元组

一些资料提到“Indexed Nested-Loop Join”仅适用于等连接或自然连接,并且内部关系的连接属性上有索引

SELECT *
FROM tableA as a
JOIN tableB as b
ON a.col1 > b.col1;

假设我们在 b.col1 上有一个索引。

为什么索引嵌套循环连接不适用于这种情况?

4

2 回答 2

3

您正在引用关于数据库系统概念 (c) Silberschatz、Korth 和 Sudarshan 的幻灯片。

我们希望 DBMS 计算连接。在许多特殊情况下,它可以通过各种方式完成。这些可能涉及是否有索引,选择条件等。

该书以该名称调用的特定技术在某些情况下有效:

索引嵌套循环连接

如果索引在内部循环的连接属性上可用并且连接是等连接或自然连接

答案是,因为你的查询不满足条件。它不是等值连接(即 ON 或 WHERE a.col1 = b.col1)或自然连接(USING (col1) 或 NATURAL JOIN)。

至于为什么不满足这些条件意味着不使用该技术,那将是因为它不起作用和/或其他一些技术更好。你给了技术:

对于外部关系 r 中的每个元组 tr,使用索引查找 s 中满足与元组 tr 连接条件的元组

如果是不等式,则不能“查找”索引;你已经通过索引搜索。不是这个方法。

于 2014-06-18T03:25:05.243 回答
0

好吧,我阅读了第二个答案,因此我查看了Silberschatz、Korth 和 Sudarshan撰写的名为 Database System Concepts 7th Edition 的书

首先,如您所见,如果索引在内部循环上可用,则可以使用索引嵌套循环连接,并且我们没有任何其他与等式连接相关的限制

在此处输入图像描述

我认为混淆在于合并加入。在第 708 页,第 15 章,查询处理主题中,我们可以看到该算法仅可用于计算自然连接和等连接。

在此处输入图像描述

受益于这个话题,只提一下Hash Join。在这种情况下,与 Merge Join 一样,可以仅用于计算自然连接和等连接。

在此处输入图像描述

于 2020-09-17T15:36:50.433 回答