Commit c7111d11 authored by Simon Riggs's avatar Simon Riggs

Revert buggy optimization of index scans

606c0123 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.
parent 6c90996a
...@@ -1026,33 +1026,6 @@ _bt_first(IndexScanDesc scan, ScanDirection dir) ...@@ -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, ...@@ -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; ...@@ -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)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment