• Tom Lane's avatar
    Fix cost estimation for indexscans on expensive indexed expressions. · b9896198
    Tom Lane authored
    genericcostestimate() and friends used the cost of the entire indexqual
    expressions as the charge for initial evaluation of indexscan arguments.
    But of course the index column is not evaluated, only the other side
    of the qual expression, so this was a bad overestimate if the index
    column was an expensive expression.
    
    To fix, refactor the logic in this area so that there's a single routine
    charged with deconstructing index quals and figuring out what is the index
    column and what is the comparison expression.  This is more or less free in
    the case of btree indexes, since btcostestimate() was doing equivalent
    deconstruction already.  It probably adds a bit of new overhead in the cases
    of other index types, but not a lot.  (In the case of GIN I think I saved
    something by getting rid of code that wasn't aware that the index column
    associations were already available "for free".)
    
    Per recent gripe from Jeff Janes.
    
    Arguably this is a bug fix, but I'm hesitant to back-patch because of the
    possibility of destabilizing plan choices that people may be happy with.
    b9896198
selfuncs.c 218 KB