• Tom Lane's avatar
    Rewrite choose_bitmap_and() to make it more robust in the presence of · 2e824a8e
    Tom Lane authored
    competing alternatives for indexes to use in a bitmap scan.  The former
    coding took estimated selectivity as an overriding factor, causing it to
    sometimes choose indexes that were much slower to scan than ones with a
    slightly worse selectivity.  It was also too narrow-minded about which
    combinations of indexes to consider ANDing.  The rewrite makes it pay more
    attention to index scan cost than selectivity; this seems sane since it's
    impossible to have very bad selectivity with low cost, whereas the reverse
    isn't true.  Also, we now consider each index alone, as well as adding
    each index to an AND-group led by each prior index, for a total of about
    O(N^2) rather than O(N) combinations considered.  This makes the results
    much less dependent on the exact order in which the indexes are
    considered.  It's still a lot cheaper than an O(2^N) exhaustive search.
    A prefilter step eliminates all but the cheapest of those indexes using
    the same set of WHERE conditions, to keep the effective value of N down in
    scenarios where the DBA has created lots of partially-redundant indexes.
    2e824a8e
indxpath.c 86.6 KB