【问题标题】:why Indexed Nested-Loop Join only applicable for equi-join or natural join?为什么 Indexed Nested-Loop Join 只适用于 equi-join 或 natural join?
【发布时间】:2014-06-17 14:14:14
【问题描述】:

索引嵌套循环连接:

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

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

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

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

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

【问题讨论】:

  • 你在问什么?什么是索引嵌套循环连接?如果这涉及查询计划,那么您应该指定您正在使用的 RDBMS。没有关于 RDBMS 引擎如何执行查询的 SQL 标准。
  • @Frazz 我已经更新了我的问题。谢谢。
  • 您似乎没有得到的是,您无法决定查询的执行方式。您可以创建索引和其他东西......但它是 RDBMS 引擎决定获得您所要求的结果集的最佳方式。你的 SELECT 语句告诉引擎你想要什么。引擎决定如何将其提供给您。 (某些 RDBMS 允许您提出计划,但那是另一回事)
  • @Frazz 我想知道为什么索引嵌套循环连接仅适用于等连接或自然连接。谢谢。
  • 最简单的答案是,这是它数据库开发人员所做的。正如@Frazz 所说,您没有选择权。如果您想了解更多信息,如果您告诉我们可能会有一些信息——正如 Frazz 所说——您使用的是什么 DBMS:MySQL? SQL 服务器?使用权?甲骨文? DB2?信息系统? Sybase(哪种)?等等..

标签: database database-optimization


【解决方案1】:

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

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

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

索引嵌套循环连接

如果内部循环的连接属性和连接上的索引可用 是等值连接还是自然连接

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

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

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

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

【讨论】:

    【解决方案2】:

    嗯,我读了第二个答案,所以我查阅了名为 Database System Concepts 7th Edition,作者 Silberschatz、Korth 和 Sudarshan 的书

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-26
      • 1970-01-01
      • 1970-01-01
      • 2018-11-07
      • 1970-01-01
      • 2012-11-17
      • 2011-09-25
      • 2015-03-03
      相关资源
      最近更新 更多