哪个表在嵌套循环连接中被视为"内部"

Sex*_*ast 6 sql join nested-loops

任何人都可以告诉我哪个表被认为是嵌套循环连接中的内部表?例如,如果查询是from a inner join b on...,哪一个a,或b将被视为内部?我知道它是b,但是从dbsophic的文章来看,在具有良好索引的内部输入的小外环下的第一个例子似乎暗示了反过来.

gbn*_*gbn 8

为了确定...

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

物理运算符的内表和外表的选择由优化器完成,逻辑运算符无关.

现在,嵌套循环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)
Run Code Online (Sandbox Code Playgroud)

所以它在理论上没有什么不同.

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

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

  • @Cupidvogel:表顺序在物理(实现)级别上(对于性能而言)很重要,但在逻辑(语言)级别则不然.优化器将逻辑级别(语言)转换为物理级别(实现),选择它认为最佳的物理顺序.您在语言(逻辑)中使用的顺序无关紧要,除非您选择覆盖优化程序,除非您是专家,否则不建议使用优化程序. (3认同)
  • @Cupidvogel:"绕过查询优化器"意味着你比编写RDBMS的专家更了解.不太可能.另外,请注意我并不是每天都在考虑基础物理操作员.我也不会第二次猜测优化器 (2认同)