Join 如何为磁盘读取优化块嵌套循环联接?

Join 如何为磁盘读取优化块嵌套循环联接?,join,optimization,Join,Optimization,关于BNLJ合理优化的快速问题: 假设我们有以下关系: A(A、b、d) B(c、m、n、ww、d) 以及以下查询: Select A.a, A.b, B.c From A join B using (d) Where A.b > 800 AND B.m = 'zack' 在这种情况下,所有可能的关系优化如下: A.a, A.b A.d (A.b > 800 A) B.c B.d (B.m = 'zack' B) 我们首先有选择,然后是投影 现在我们有两种方法:A作

关于BNLJ合理优化的快速问题:

假设我们有以下关系:

  • A(A、b、d)
  • B(c、m、n、ww、d)
以及以下查询:

Select A.a, A.b, B.c  
From A join B using (d)  
Where A.b > 800 AND B.m = 'zack'
在这种情况下,所有可能的关系优化如下:

A.a, A.b A.d (A.b > 800 A) 
B.c B.d (B.m = 'zack' B)
我们首先有选择,然后是投影

现在我们有两种方法:A作为外环,B作为内环,A作为内环,B作为外环

好的,我知道所有关于缓冲页和公式的东西。 然而,我对这件事感到困惑

我们是否首先对这两种关系进行优化(无论它们是什么循环),并将“优化”页面存储在内存中,然后获取它们以执行连接(在两种情况下,A-B或B-A我们都使用优化页面)

或者我们只对我们选择作为外循环的关系进行优化,而不对我们选择作为内循环的关系进行任何优化

或者我们在进行过程中对这两个方面都进行了优化

如果我们的外循环优化版本大于缓冲区空间,我们是否仍能将“过滤”记录存储在内存中,并依靠BNLJ在连续运行外循环时拾取它们

那么,一般来说,如果提供上述查询,那么确保BNLJ尽可能高效地执行的整个过程是什么呢


谢谢

你问的是关于MySQL的一般问题还是具体问题?如果特别是关于MySQL,那么您将面临“过度学习”的风险。这些细节很容易在不同版本之间或在非常特殊的情况下发生变化。我问的是,一般来说,这些假设是否合理。谢谢