• Tom Lane's avatar
    Allow bitmap scans to operate as index-only scans when possible. · 7c70996e
    Tom Lane authored
    If we don't have to return any columns from heap tuples, and there's
    no need to recheck qual conditions, and the heap page is all-visible,
    then we can skip fetching the heap page altogether.
    
    Skip prefetching pages too, when possible, on the assumption that the
    recheck flag will remain the same from one page to the next.  While that
    assumption is hardly bulletproof, it seems like a good bet most of the
    time, and better than prefetching pages we don't need.
    
    This commit installs the executor infrastructure, but doesn't change
    any planner cost estimates, thus possibly causing bitmap scans to
    not be chosen in cases where this change renders them the best choice.
    I (tgl) am not entirely convinced that we need to account for this
    behavior in the planner, because I think typically the bitmap scan would
    get chosen anyway if it's the best bet.  In any case the submitted patch
    took way too many shortcuts, resulting in too many clearly-bad choices,
    to be committable.
    
    Alexander Kuzmenkov, reviewed by Alexey Chernyshov, and whacked around
    rather heavily by me.
    
    Discussion: https://postgr.es/m/239a8955-c0fc-f506-026d-c837e86c827b@postgrespro.ru
    7c70996e
execnodes.h 74.6 KB