mirror of
https://github.com/postgres/postgres.git
synced 2025-04-25 21:42:33 +03:00
Revert buggy optimization of index scans
606c0123d627 attempted to reduce cost of index scans using > and < strategies, though got that completely wrong in a few complex cases. Revert whole patch until we find a safe optimization.
This commit is contained in:
parent
6c90996a4c
commit
c7111d11b1
@ -1026,33 +1026,6 @@ _bt_first(IndexScanDesc scan, ScanDirection dir)
|
|||||||
if (goback)
|
if (goback)
|
||||||
offnum = OffsetNumberPrev(offnum);
|
offnum = OffsetNumberPrev(offnum);
|
||||||
|
|
||||||
/*
|
|
||||||
* By here the scan position is now set for the first key. If all further
|
|
||||||
* tuples are expected to match we set the SK_BT_MATCHED flag to avoid
|
|
||||||
* re-checking the scan key later. This is a big win for slow key matches
|
|
||||||
* though is still significant even for fast datatypes.
|
|
||||||
*/
|
|
||||||
switch (startKeys[0]->sk_strategy)
|
|
||||||
{
|
|
||||||
case BTEqualStrategyNumber:
|
|
||||||
break;
|
|
||||||
|
|
||||||
case BTGreaterEqualStrategyNumber:
|
|
||||||
case BTGreaterStrategyNumber:
|
|
||||||
if (ScanDirectionIsForward(dir))
|
|
||||||
startKeys[0]->sk_flags |= SK_BT_MATCHED;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case BTLessEqualStrategyNumber:
|
|
||||||
case BTLessStrategyNumber:
|
|
||||||
if (ScanDirectionIsBackward(dir))
|
|
||||||
startKeys[0]->sk_flags |= SK_BT_MATCHED;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* remember which buffer we have pinned, if any */
|
/* remember which buffer we have pinned, if any */
|
||||||
Assert(!BTScanPosIsValid(so->currPos));
|
Assert(!BTScanPosIsValid(so->currPos));
|
||||||
so->currPos.buf = buf;
|
so->currPos.buf = buf;
|
||||||
|
@ -1429,13 +1429,6 @@ _bt_checkkeys(IndexScanDesc scan,
|
|||||||
bool isNull;
|
bool isNull;
|
||||||
Datum test;
|
Datum test;
|
||||||
|
|
||||||
/*
|
|
||||||
* If the scan key has already matched we can skip this key, as long
|
|
||||||
* as the index tuple does not contain NULL values.
|
|
||||||
*/
|
|
||||||
if (key->sk_flags & SK_BT_MATCHED && !IndexTupleHasNulls(tuple))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
/* row-comparison keys need special processing */
|
/* row-comparison keys need special processing */
|
||||||
if (key->sk_flags & SK_ROW_HEADER)
|
if (key->sk_flags & SK_ROW_HEADER)
|
||||||
{
|
{
|
||||||
|
@ -646,7 +646,6 @@ typedef BTScanOpaqueData *BTScanOpaque;
|
|||||||
*/
|
*/
|
||||||
#define SK_BT_REQFWD 0x00010000 /* required to continue forward scan */
|
#define SK_BT_REQFWD 0x00010000 /* required to continue forward scan */
|
||||||
#define SK_BT_REQBKWD 0x00020000 /* required to continue backward scan */
|
#define SK_BT_REQBKWD 0x00020000 /* required to continue backward scan */
|
||||||
#define SK_BT_MATCHED 0x00040000 /* required to skip further key match */
|
|
||||||
#define SK_BT_INDOPTION_SHIFT 24 /* must clear the above bits */
|
#define SK_BT_INDOPTION_SHIFT 24 /* must clear the above bits */
|
||||||
#define SK_BT_DESC (INDOPTION_DESC << SK_BT_INDOPTION_SHIFT)
|
#define SK_BT_DESC (INDOPTION_DESC << SK_BT_INDOPTION_SHIFT)
|
||||||
#define SK_BT_NULLS_FIRST (INDOPTION_NULLS_FIRST << SK_BT_INDOPTION_SHIFT)
|
#define SK_BT_NULLS_FIRST (INDOPTION_NULLS_FIRST << SK_BT_INDOPTION_SHIFT)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user