索引嵌套-循环连接:
对于外部关系R中的每个元组tr,使用索引在S中查找满足元组tr的联接条件的元组。
一些资料提到,“索引嵌套-循环连接”仅适用于等连接或自然连接,并且内部关系的联接属性上有索引可用。
SELECT *
FROM tableA as a
JOIN tableB as b
ON a.col1 > b.col1;假设我们有一个关于b.col1的索引。
为什么索引嵌套循环连接不适用于这种情况?
发布于 2014-06-18 03:25:05
您引用的是数据库系统概念(c) Silberschatz、Korth和Sudarshan的幻灯片。
我们希望DBMS计算一个连接。有很多特殊的情况下,它可以做各种方式。这些可能涉及是否存在索引、选择条件等。
在某些情况下,这本书用这个名字调用的特殊技术是有效的:
索引嵌套-循环连接 如果一个索引在内循环的join属性上可用,那么join是一个equi-join或天然连接。
答案是,因为您的查询不符合条件。它不是等连接(即a.col1 = b.col1)或自然连接(使用(col1)或自然连接)。
至于为什么不满足这些条件意味着不使用该技术,这将是因为它不起作用和/或其他一些技术更好。你给了我技巧:
对于外部关系r中的每个元组tr,使用索引查找符合元组tr的联接条件的元组。
如果这是一个不平等,您就不能“在”索引中查找;您可以搜索索引。不是这个方法。
发布于 2020-09-17 15:36:50
我读了第二个答案,所以我看了一本书,书名为“数据库系统概念第7版”,作者是Silberschatz,Korth和Sudarshan
首先,正如您所看到的,索引嵌套循环连接可以在内部循环上可用索引时使用,而且我们没有任何其他与相等联接相关的限制。

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

利用这个话题,只提一下Hash。在这种情况下,与合并联接一样,也可以仅用于计算自然联接和等联接。

https://stackoverflow.com/questions/24266137
复制相似问题