Re: Improve hash join's handling of tuples with null join keys
Chao Li <li.evan.chao@gmail.com>
From: Chao Li <li.evan.chao@gmail.com>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: pgsql-hackers@lists.postgresql.org
Date: 2025-08-19T00:58:47Z
Lists: 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/
Commits
-
Improve hash join's handling of tuples with null join keys.
- 1811f1af98fb 19 (unreleased) landed