有人能告诉我哪个表被认为是嵌套循环连接中的内部表吗?例如,如果查询为from a inner join b on...
,哪一个,a
或b
将被视为内部?我知道它是b
,但是从dbsophic的文章中,小外环下的第一个示例,带有良好索引的内部输入似乎表明相反。
答案 0 :(得分:8)
确定......
物理运算符的内部和外部表的选择由优化器完成,并且与逻辑运算符无关。
现在,嵌套循环psudeo代码就是这个
for each row R1 in the outer table
for each row R2 in the inner table
if R1 joins with R2
return (R1, R2)
所以它在理论上没有什么不同。
在实践中,优化器将为内部和外部表格找到最好的方法:这是您的文章链接应该描述的内容。 A.k.a如何减少迭代次数
为了完整性...... INNER JOIN
逻辑运算符是可交换的和关联的
因此A INNER JOIN B
与B INNER JOIN A
相同
这里没有内外表
答案 1 :(得分:2)
实际上,两个表都是inner
,因为如果两个表中都匹配,则只返回行
在进行外连接时,您可以指定哪个表应该是外连接:
答案 2 :(得分:0)
我想知道我们是否需要将思维分为"外部联接"和"内循环加入"。
对于外部联接,有一个约定(传统?)将LEFT JOIN的LEFT命名为"外部表"。 (参见下面的Sybase)它似乎是语法指定。 (丹尼尔正在解释这一点。)
对于内部联接,没有这样的区别,但是对于嵌套循环连接,需要确定哪个表成为驱动表,并且由优化器确定。
Sybase有一篇描述内部和外部表的文章。 http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.infocenter.dc32300.1570/html/sqlug/sqlug153.htm "术语外表和内表描述了表在外连接中的位置"