]> granicus.if.org Git - postgresql/commit
User narrower representative tuples in the hash-agg hashtable.
authorAndres Freund <andres@anarazel.de>
Thu, 1 Dec 2016 01:30:09 +0000 (17:30 -0800)
committerAndres Freund <andres@anarazel.de>
Thu, 1 Dec 2016 01:30:09 +0000 (17:30 -0800)
commitfc4b3dea2950e4f6081f1ed2380f82c9efd672e0
tree9ab6f63fcd0a5752d1db2d1f2180831915cbf318
parent8ed3f11bb045ad7a3607690be668dbd5b3cc31d7
User narrower representative tuples in the hash-agg hashtable.

So far the hashtable stored representative tuples in the form of its
input slot, with all columns in the hashtable that are not
needed (i.e. not grouped upon or functionally dependent) set to NULL.

Thats good for saving memory, but it turns out that having tuples full
of NULL isn't free. slot_deform_tuple is faster if there's no NULL
bitmap even if no NULLs are encountered, and skipping over leading NULLs
isn't free.

So compute a separate tuple descriptor that only contains the needed
columns. As columns have already been moved in/out the slot for the
hashtable that does not imply additional per-row overhead.

Author: Andres Freund
Reviewed-By: Heikki Linnakangas
Discussion: https://postgr.es/m/20161103110721.h5i5t5saxfk5eeik@alap3.anarazel.de
src/backend/executor/nodeAgg.c
src/include/nodes/execnodes.h