У меня есть следующий план выполнения для этого запроса:
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
?