Re: POC: converting Lists into arrays
Tom Lane <tgl@sss.pgh.pa.us>
Robert Haas <robertmhaas@gmail.com> writes: > I think the reason why you're not seeing a performance benefit is > because the problem is not that lists are generically a more expensive > data structure than arrays, but that there are cases when they are > more expensive than arrays. If you only ever push/pop at the front, > of course a list is going to be better. If you often look up elements > by index, of course an array is going to be better. If you change > every case where the code currently uses a list to use something else > instead, then you're changing both the winning and losing cases. I don't think this argument is especially on-point, because what I'm actually seeing is just that there aren't any list operations that are expensive enough to make much of an overall difference in typical queries. To the extent that an array reimplementation reduces the palloc traffic, it'd take some load off that subsystem, but apparently you need not-typical queries to really notice. (And, if the real motivation is aggregate palloc savings, then yes you really do want to replace everything...) > Yeah, changing things individually is more work, but that's how you > get the wins without incurring the losses. The concern I have is mostly about the use of lists as core infrastructure in parsetree, plantree, etc data structures. I think any idea that we'd replace those piecemeal is borderline insane: it's simply not worth it from a notational and bug-risk standpoint to glue together some parts of those structures differently from the way other parts are glued together. regards, tom lane
Commits
-
Remove EState.es_range_table_array.
- 3c926587b592 13.0 landed
-
Rationalize use of list_concat + list_copy combinations.
- 5ee190f8ec37 13.0 landed
-
Cosmetic improvements in setup of planner's per-RTE arrays.
- 1661a4050593 13.0 landed
-
Make better use of the new List implementation in a couple of places
- efdcca55a3df 13.0 landed
-
Fix sepgsql test results for commit d97b714a2.
- 82c8a3c52adf 13.0 landed
-
Avoid using lcons and list_delete_first where it's easy to do so.
- d97b714a2199 13.0 landed
-
Remove lappend_cell...() family of List functions.
- c245776906b0 13.0 landed
-
Clean up some ad-hoc code for sorting and de-duplicating Lists.
- 2f5b8eb5a28b 13.0 landed
-
Redesign the API for list sorting (list_qsort becomes list_sort).
- 569ed7f48312 13.0 landed
-
Remove dead code.
- 4c3d05d875dd 13.0 landed
-
Represent Lists as expansible arrays, not chains of cons-cells.
- 1cff1b95ab6d 13.0 landed
-
Standardize some more loops that chase down parallel lists.
- c94fb8e8acc0 12.0 landed
-
Reimplement the linked list data structure used throughout the backend.
- d0b4399d81f3 8.0.0 cited