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...@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(-)