了解散列连接的工作原理

问题描述 投票:0回答:1

我有这个查询的以下执行计划:

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的顺序扫描是将所有数据转储到散列中,但为什么seq扫描houses

postgresql join explain
1个回答
0
投票

你的第二步有点错误:

  • 首先,扫描内部关系并对连接条件进行散列。这样,构建了哈希结构。
  • 其次,扫描外部关系,并探测散列表以查找找到的每一行的匹配。

如果第二步是相反的方法,那么你将有一个嵌套的循环连接,并带有不必要的散列步骤。

© www.soinside.com 2019 - 2024. All rights reserved.