database - 数据库查询优化器和并行性中的左深度连接树

标签 database join query-optimization

我在文献中读到,就并行性而言,左深连接树不如右深连接树有利。 给出的理由如下

          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/

相关文章:

mysql - SQL 查询花费太长时间(LEFT OUTER JOIN)

Mysql子查询问题

mysql - SQL查询匹配别名和排序依据并优化查询

sql - PostgreSQL 不使用 HashAgg 进行 UNION 查询

database - 在 Yesod 脚手架站点初始化 SQLite 数据库

database - "COMPRESS FOR ALL OPERATIONS"和 "COMPRESS FOR OLTP"之间的区别?

mysql - 自联表 SQL

ios - 如何将 sqlite 数据库中的图像显示到 UIImageView

MySQL - 无法使用多重选择和连接选择所有科目和年级

mysql - 简单的选择查询优化