Make PlaceHolderInfo lookup O(1).
authorTom Lane <tgl@sss.pgh.pa.us>
Wed, 17 Aug 2022 19:35:51 +0000 (15:35 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Wed, 17 Aug 2022 19:35:51 +0000 (15:35 -0400)
commit6569ca43973b754e8213072c8ddcae9e7baf2aaa
tree396627f9ae41b4bd5f069cd20c142d30d62b8b59
parentefd0c16becbf45e3b0215e124fde75fee8fcbce4
Make PlaceHolderInfo lookup O(1).

Up to now we've just searched the placeholder_list when we want to
find the PlaceHolderInfo with a given ID.  While there's no evidence
of that being a problem in the field, an upcoming patch will add
find_placeholder_info() calls in build_joinrel_tlist(), which seems
likely to make it more of an issue: a joinrel emitting lots of
PlaceHolderVars would incur O(N^2) cost, and we might be building
a lot of joinrels in complex queries.  Hence, add an array that
can be indexed directly by phid to make the lookups constant-time.

Discussion: https://postgr.es/m/1405792.1660677844@sss.pgh.pa.us
src/backend/optimizer/plan/analyzejoins.c
src/backend/optimizer/plan/planmain.c
src/backend/optimizer/util/placeholder.c
src/backend/optimizer/util/var.c
src/include/nodes/pathnodes.h