我在文献中读到,就并行性而言,左深连接树不如右深连接树有利。 给出的理由如下
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 操作总是发生在左关系上。 这解释了为什么右深连接树比左深连接树有更好的并行执行计划。
关于database - 数据库查询优化器和并行性中的左深度连接树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7073449/