pgsql: Allow bitmap scans to operate as index-only scans when possible.

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: pgsql-committers(at)postgresql(dot)org
Subject: pgsql: Allow bitmap scans to operate as index-only scans when possible.
Date: 2017-11-01 21:38:31
Message-ID: E1eA0iV-0002le-8F@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Allow bitmap scans to operate as index-only scans when possible.

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

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/7c70996ebf0949b142a99c9445061c3c83ce62b3

Modified Files
--------------
src/backend/executor/nodeBitmapHeapscan.c | 165 +++++++++++++++++++++++-------
src/backend/optimizer/plan/createplan.c | 9 ++
src/include/nodes/execnodes.h | 10 +-
src/test/regress/expected/stats.out | 3 +
src/test/regress/sql/stats.sql | 3 +
5 files changed, 150 insertions(+), 40 deletions(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Peter Eisentraut 2017-11-02 02:01:37 pgsql: pg_basebackup: Fix comparison handling of tablespace mappings on
Previous Message Peter Eisentraut 2017-11-01 18:35:50 pgsql: doc: Mention pg_stat_wal_receiver in streaming replication docs