]> granicus.if.org Git - postgresql/commitdiff
Revert buggy optimization of index scans
authorSimon Riggs <simon@2ndQuadrant.com>
Thu, 3 Mar 2016 09:53:43 +0000 (09:53 +0000)
committerSimon Riggs <simon@2ndQuadrant.com>
Thu, 3 Mar 2016 09:53:43 +0000 (09:53 +0000)
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.

src/backend/access/nbtree/nbtsearch.c
src/backend/access/nbtree/nbtutils.c
src/include/access/nbtree.h

index 3db32e8d560242290a2cc2e57a982c2ac5890335..14dffe07db6940169f5db029f9450ad214804815 100644 (file)
@@ -1026,33 +1026,6 @@ _bt_first(IndexScanDesc scan, ScanDirection dir)
        if (goback)
                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 */
        Assert(!BTScanPosIsValid(so->currPos));
        so->currPos.buf = buf;
index c850b4804fe99f6f364af8f474d267e46dd5cc35..b714b2c2fb68b7353190d19e9841266ee29990ed 100644 (file)
@@ -1429,13 +1429,6 @@ _bt_checkkeys(IndexScanDesc scan,
                bool            isNull;
                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 */
                if (key->sk_flags & SK_ROW_HEADER)
                {
index 06822fac3c4282891581cee7f6a0ebc6be95f210..9046b166bd9a56262f9cd02fd22b5a365307b64b 100644 (file)
@@ -646,7 +646,6 @@ typedef BTScanOpaqueData *BTScanOpaque;
  */
 #define SK_BT_REQFWD   0x00010000              /* required to continue forward 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_DESC                     (INDOPTION_DESC << SK_BT_INDOPTION_SHIFT)
 #define SK_BT_NULLS_FIRST      (INDOPTION_NULLS_FIRST << SK_BT_INDOPTION_SHIFT)