了解哈希联接的工作原理

时间:2019-04-04 15:34:27

标签: postgresql join explain

对于此查询,我有以下执行计划:

EXPLAIN SELECT * FROM houses INNER JOIN users ON houses.creator_id = users.id;

Hash Join  (cost=16.52..20.79 rows=100 width=600)
  Hash Cond: (houses.creator_id = users.id)
  ->  Seq Scan on houses  (cost=0.00..4.00 rows=100 width=348)
  ->  Hash  (cost=12.90..12.90 rows=290 width=252)
        ->  Seq Scan on users  (cost=0.00..12.90 rows=290 width=252)

如果我正确理解了哈希联接算法,则将正确的关系(users)放入哈希表中,然后使用该关系在左侧的关系(houses)中找到合适的行快速访问哈希表。

但是,我不知道它与那个EXPLAIN是如何匹配的。为什么要对houses进行顺序扫描?我了解users的顺序扫描是将所有数据转储到哈希中,但是为什么要对houses进行seq扫描?

1 个答案:

答案 0 :(得分:0)

您得到的第二步略有错误:

  • 首先,扫描内部关系,并对连接条件进行哈希处理。这样,就建立了哈希结构。

  • 第二,扫描外部关系 ,并在哈希表中查找找到的每一行的匹配项。

如果第二步相反,那么您将有一个嵌套循环联接和不必要的散列步骤。