我在文献中读到,左深连接树在并行性方面不如右深连接树好。
原因如下

          X
         / \
        /   \
       X     r6
      / \
     /   \
    X    r5
  /
 /     \
r0     r1

在这个连接树中,根据文献,哈希连接将按以下方式执行,
1. HashTable on r0 and then probe using r1
2. HashTable on r0 X r1 then hash probe using r5
3. HashTable on r0 X r1 X r5 and hash probe using r6

但是一种更简单的并行连接方式是
1. HashTable on r1, r5, r6 independently
2. HashProbe r1 using r0, use result to hash probe r5 and then r6
   This can be nicely pipelined.

为什么不能这样做?
我是不是漏掉了一些显而易见的东西?
裁判:
http://docs.google.com/viewer?a=v&pid=explorer&chrome=true&srcid=1BBIHNuObz9vsFxaCtpKUeDg-Xif2kqRVnb0Mr_3IUah-RyTceFCANTq8drXW&hl=en_US(转到第18页)
我也在书中读到类似的东西:http://www.amazon.com/Principles-Database-Processing-Applications-Management/dp/1558604340

最佳答案

我想我了解了它的工作原理,在我读过的所有地方,都假设hashbuild操作总是发生在左关系上。
这就解释了为什么右深连接树比左深连接树有更好的并行执行计划。

08-18 02:12