• Tom Lane's avatar
    Fix some problems with selectivity estimation for partial indexes. · 54d20024
    Tom Lane authored
    First, genericcostestimate() was being way too liberal about including
    partial-index conditions in its selectivity estimate, resulting in
    substantial underestimates for situations such as an indexqual "x = 42"
    used with an index on x "WHERE x >= 40 AND x < 50".  While the code is
    intentionally set up to favor selecting partial indexes when available,
    this was too much...
    
    Second, choose_bitmap_and() was likewise easily fooled by cases of this
    type, since it would similarly think that the partial index had selectivity
    independent of the indexqual.
    
    Fixed by using predicate_implied_by() rather than simple equality checks
    to determine redundancy.  This is a good deal more expensive but I don't
    see much alternative.  At least the extra cost is only paid when there's
    actually a partial index under consideration.
    
    Per report from Jeff Davis.  I'm not going to risk back-patching this,
    though.
    54d20024
select.out 16.5 KB