Make PlaceHolderInfo lookup O(1).
Tom Lane <tgl@sss.pgh.pa.us>
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
Files
| Path | Change | +/− |
|---|---|---|
| src/backend/optimizer/plan/analyzejoins.c | modified | +3 −0 |
| src/backend/optimizer/plan/planmain.c | modified | +2 −0 |
| src/backend/optimizer/util/placeholder.c | modified | +38 −5 |
| src/backend/optimizer/util/var.c | modified | +2 −9 |
| src/include/nodes/pathnodes.h | modified | +5 −0 |
Discussion
- Making Vars outer-join aware 60 messages · 2022-07-01 → 2023-07-23