pgsql: Skip checking of scan keys required for directional scan in B-tr

From: Alexander Korotkov <akorotkov(at)postgresql(dot)org>
To: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: pgsql: Skip checking of scan keys required for directional scan in B-tr
Date: 2023-10-06 07:41:37
Message-ID: E1qofSq-000Iff-8c@gemulon.postgresql.org
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Skip checking of scan keys required for directional scan in B-tree

Currently, B-tree code matches every scan key to every item on the page.
Imagine the ordered B-tree scan for the query like this.

SELECT * FROM tbl WHERE col > 'a' AND col < 'b' ORDER BY col;

The (col > 'a') scan key will be always matched once we find the location to
start the scan. The (col < 'b') scan key will match every item on the page
as long as it matches the last item on the page.

This patch implements prechecking of the scan keys required for directional
scan on beginning of page scan. If precheck is successful we can skip this
scan keys check for the items on the page. That could lead to significant
acceleration especially if the comparison operator is expensive.

Idea from patch by Konstantin Knizhnik.

Discussion: https://postgr.es/m/079c3f8e-3371-abe2-e93c-fc8a0ae3f571%40garret.ru
Reviewed-by: Peter Geoghegan, Pavel Borisov

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/e0b1ee17dc3a38ba17fee0fd58b7b834ec934259

Modified Files
--------------
src/backend/access/nbtree/nbtree.c | 1 +
src/backend/access/nbtree/nbtsearch.c | 70 +++++++++++++++++++++++++++++++++--
src/backend/access/nbtree/nbtutils.c | 59 ++++++++++++++++++++++-------
src/include/access/nbtree.h | 6 ++-
4 files changed, 119 insertions(+), 17 deletions(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Etsuro Fujita 2023-10-06 09:43:10 pgsql: Remove extra parenthesis from comment.
Previous Message Heikki Linnakangas 2023-10-06 07:27:15 pgsql: Fix crash on syslogger startup