有人能告诉我在嵌套循环连接中哪个表被认为是内部表吗?例如,如果查询是from a inner join b on...,那么哪个查询、a或b将被视为内部查询?我知道它是b,但从德索维奇的文章来看,小外部循环下的第一个示例(具有良好索引的内部输入)似乎表明了相反的情况。
发布于 2012-08-29 12:21:04
可以肯定..。
物理运算符的内表和表的选择是由优化器进行的,它是无关的,与逻辑运算符无关。
现在,嵌套循环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.如何减少迭代次数
为了完整..。INNER JOIN逻辑算子是可交换的和结合的
所以A INNER JOIN B和B INNER JOIN A是一样的。
这里没有内外桌。
发布于 2012-08-29 12:16:21
实际上,这两个表都是inner,因为如果两个表中都有匹配,则只返回行。
在执行外部联接时,可以指定哪个表应该是外部表:
发布于 2017-04-16 19:02:16
我想知道我们是否需要把思维分为“外部连接”和“内环连接”。
对于外加入,有一种惯例(传统?)将左联接的名称命名为“外层表”。(见下文从Sybase)这似乎是句法上的命名。(丹尼尔解释了这个问题。)
对于内部连接,没有这样的区别,但是对于嵌套循环连接,需要确定哪个表成为驱动表,并且它由优化器决定。
Sybase有一篇描述内部和外部表的文章。http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.infocenter.dc32300.1570/html/sqlug/sqlug153.htm“外部表和内表的术语描述表在外部联接中的位置”
https://stackoverflow.com/questions/12177672
复制相似问题