Re: Improve hash join's handling of tuples with null join keys

Поиск
Список
Период
Сортировка
От Chao Li
Тема Re: Improve hash join's handling of tuples with null join keys
Дата
Msg-id 659B2B36-C0FE-4642-921D-E7120E838891@gmail.com
обсуждение исходный текст
Ответ на Re: Improve hash join's handling of tuples with null join keys  (Tom Lane <tgl@sss.pgh.pa.us>)
Ответы Re: Improve hash join's handling of tuples with null join keys
Список pgsql-hackers


On Aug 19, 2025, at 05:37, Tom Lane <tgl@sss.pgh.pa.us> wrote:


Yeah, we could make multi-batch PHJ do this differently from the other
cases, but I don't want to go there: too much complication and risk of
bugs for what is a purely hypothetical performance issue.  Besides
which, if the join is large enough to be worth worrying over, it's
most likely taking that code path anyhow.


We can simply added a new flag to HashTable, say named skip_building_hash. Upon right join (join to the hash side), and outer table is empty, set the flag to true, then in the MultiExecPrivateHash(), if skip_building_hash is true, directly put all tuples into node->null_tuple_store without building a hash table.
Then in ExecHashJoinImpl(), after "(void) MultiExecProcNode()" is called, if hashtable->skip_building_hash is true, directly set node->hj_JoinState = HJ_FILL_INNER_NULL_TUPLES.

I'm not excited about this idea either.  It's completely abusing the
data structure, because the "null_tuple_store" is now being used for
tuples that (probably) don't have null join keys.  The fact that you
could cram it in with not very many lines of code does not mean that
the result will be understandable or maintainable --- and certainly,
hash join is on the hairy edge of being too complicated already.

regards, tom lane

Thanks for the explanation. Then these two comments are resolved.

--
Chao Li (Evan)
HighGo Software Co., Ltd.
https://www.highgo.com/




В списке pgsql-hackers по дате отправления: