MySQL中的嵌套循环

MySQL中的嵌套循环,mysql,sql-execution-plan,Mysql,Sql Execution Plan,在中,有一段介绍了理解MySQL解释的一些关键概念: 什么是连接 一切都是连接,因为MySQL总是使用嵌套循环 即使是单个表选择、联合或子查询 有人能解释一下这对单个表SELECT的作用吗?嵌套循环是处理联接的一种方法: for each row of table A if this row matches where clauses for each row of joined table B if this row matches where clauses an

在中,有一段介绍了理解MySQL解释的一些关键概念:

什么是连接

  • 一切都是连接,因为MySQL总是使用嵌套循环
  • 即使是单个表选择、联合或子查询

有人能解释一下这对单个表SELECT的作用吗?

嵌套循环是处理联接的一种方法:

for each row of table A
  if this row matches where clauses
    for each row of joined table B
      if this row matches where clauses and join clauses
        accept row
      end
    end
  end
end
这可以通过索引进行大量优化,方法是“为某个索引中键K处的每一行”而不是“表a的每一行”,表B也是如此

演示文稿说这是MySQL进程连接的唯一方式。还有其他方法可以使用,但MySQL没有实现它们。此OraFAQ条目提供了Oracle实现的几个方面:类似地:


“一切都是一个连接”只是一个实现细节,我相信。不太重要。

我问过MySQL上的单表选择,所以你的答案不适用。你可能认为这“没那么重要”,但我认为。我仍然希望我的问题得到回答。@RADA:我不确定MySQL是如何将单个表select转换为join的。也许它将它连接到一个有一行的虚拟表,或者左连接到一个零行虚拟表?我想MySQL的源代码肯定会这么说。