pgsql: Remove trailing zero words from Bitmapsets - Mailing list pgsql-committers

From David Rowley
Subject pgsql: Remove trailing zero words from Bitmapsets
Date
Msg-id E1qGU0a-001myT-O9@gemulon.postgresql.org
Whole thread Raw
List pgsql-committers
Remove trailing zero words from Bitmapsets

Prior to this, Bitmapsets could contain trailing words which had no
members set.  Many places in bitmapset.c had to loop over trailing words
to check for empty words.  If we ensure we always remove these trailing
zero words then we can perform various optimizations such as fast
pathing bms_is_subset to return false when 'a' has more words than 'b'.
A similar optimization is possible in bms_equal.  Both of these together
can yield quite significant performance increases in the query planner
when querying a partitioned table with around 100 or more partitions.

While we're at it, since the minimum number of words a Bitmapset can
contain is 1, we can make use of do/while loops instead of for loops
when looping over all words in a set.  This means checking the loop
condition 1 less time, which for single-word sets cuts the loop
condition checks in half.

Author: David Rowley
Reviewed-by: Yuya Watari
Discussion: https://postgr.es/m/CAApHDvr5O41MuUjw0DQKqmAnv7QqvmLqXReEd5o4nXTzWp8-+w@mail.gmail.com

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/a8c09daa8bb1d741bb8b3d31a12752448eb6fb7c

Modified Files
--------------
src/backend/nodes/bitmapset.c | 419 ++++++++++++++++++++++++------------------
1 file changed, 236 insertions(+), 183 deletions(-)


pgsql-committers by date:

Previous
From: Michael Paquier
Date:
Subject: pgsql: Fix regression tests of unaccent to work without UTF8 support
Next
From: Thomas Munro
Date:
Subject: pgsql: Re-bin segment when memory pages are freed.