为什么Indexed Nested-Loop Join仅适用于等连接或自然连接?

时间:2014-06-17 14:14:15

标签: database database-optimization

索引嵌套循环加入:

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

一些材料提到"索引嵌套循环加入"仅适用于等连接或自然连接,并且内部关系的连接属性

上有索引
SELECT *
FROM tableA as a
JOIN tableB as b
ON a.col1 > b.col1;

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

为什么Indexed Nested-Loop Join不适用于这种情况?

2 个答案:

答案 0 :(得分:2)

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

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

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

  

索引嵌套循环连接

     

如果内部循环的连接属性和连接上有索引可用   是一种等连接或自然连接

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

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

  

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

如果这是不平等,你就不能在"中查找"指数;您已搜索索引。不是这种方法。

答案 1 :(得分:0)

我阅读了第二个答案,所以我检查了Silberschatz,Korth和Sudarshan撰写的名为 Database System Concepts 7th Edition”的书

首先,如您所见,如果内循环上有索引,并且没有其他与等价联接相关的限制,则可以使用索引嵌套循环联接。

enter image description here

我认为合并联接带来了困惑。在第708页的第15章“查询处理”主题中,我们可以看到该算法仅可用于计算自然联接和等联接。

enter image description here

适用于该主题,仅提及哈希联接。在这种情况下,与合并联接相同,只能用于计算自然联接和等联接。

enter image description here