6

谁能告诉我哪个表被认为是嵌套循环连接中的内部表?例如,如果查询是from a inner join b on...,则哪个a、 或b将被视为内部?我知道是这样b,但是从dbsophic的文章来看,具有良好索引的内部输入的 Small outer loop下的第一个示例似乎暗示了相反的情况。

4

3 回答 3

8

为了确定...

  • “INNER JOIN”是一个逻辑(关系)连接运算符
  • 内表和外表是物理嵌套循环连接运算符中的概念

物理运算符的内部和外部表的选择由优化器进行,与逻辑运算符无关。

现在,嵌套循环伪代码是这样的

for each row R1 in the outer table
    for each row R2 in the inner table
        if R1 joins with R2
            return (R1, R2)

所以理论上没什么区别。

在实践中,优化器将为内表和外表找出最佳方法:这是您的文章链接应该描述的内容。又如何减少迭代次数

为了完整性......INNER JOIN逻辑运算符是可交换的和关联的
所以A INNER JOIN B是相同的B INNER JOIN A
这里没有内表和外表

于 2012-08-29T12:21:04.017 回答
2

实际上,inner如果两个表中都存在匹配项,则两个表都只返回行。
在进行外部联接时,您指定哪个表应该是外部表:

  • 左外连接:第一个表是返回所有行的表,第二个表是只返回匹配行的表。
  • 右外连接:第二个表是返回所有行的表,第一个表是只返回匹配行的表。
  • 全外连接:返回两个表中的所有行。
于 2012-08-29T12:16:21.647 回答
0

我想知道我们是否需要将思维分为“外连接”和“内循环连接”。

对于外部联接,有一个约定(传统?)将 LEFT 的 LEFT JOIN 命名为“外部表”。(见下文来自 Sybase)这似乎是句法名称。(丹尼尔正在解释这一点。)

对于inner join没有这样的区别,但是对于nested loop join,需要判断哪个表成为驱动表,由优化器决定。

Sybase 有一篇文章描述了内部表和外部表。 http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.infocenter.dc32300.1570/html/sqlug/sqlug153.htm “术语外表和内表描述了表的位置在外连接中”

于 2017-04-16T19:02:16.433 回答