github.com/cockroachdb/cockroach@v20.2.0-alpha.1+incompatible/pkg/sql/opt/exec/execbuilder/testdata/limit (about)

     1  # LogicTest: local
     2  
     3  statement ok
     4  CREATE TABLE t (k INT PRIMARY KEY, v INT, w INT, INDEX(v))
     5  
     6  # There must be no limit at the index scan level.
     7  query TTTTT colnames
     8  EXPLAIN (VERBOSE) SELECT * FROM t WHERE v > 4 AND v < 8 AND w > 30 ORDER BY v LIMIT 2
     9  ----
    10  tree                  field        description  columns    ordering
    11  ·                     distributed  false        ·          ·
    12  ·                     vectorized   true         ·          ·
    13  limit                 ·            ·            (k, v, w)  +v
    14   │                    count        2            ·          ·
    15   └── filter           ·            ·            (k, v, w)  +v
    16        │               filter       w > 30       ·          ·
    17        └── index-join  ·            ·            (k, v, w)  +v
    18             │          table        t@primary    ·          ·
    19             │          key columns  k            ·          ·
    20             └── scan   ·            ·            (k, v)     +v
    21  ·                     table        t@t_v_idx    ·          ·
    22  ·                     spans        /5-/8        ·          ·
    23  
    24  # This kind of query can be used to work around memory usage limits. We need to
    25  # choose the "hard" limit of 100 over the "soft" limit of 25 (with the hard
    26  # limit we will only store 100 rows in the sort node). See #19677.
    27  query TTTTT colnames
    28  EXPLAIN (VERBOSE) SELECT DISTINCT w FROM (SELECT w FROM t ORDER BY w LIMIT 100) ORDER BY w LIMIT 25
    29  ----
    30  tree                      field        description  columns  ordering
    31  ·                         distributed  false        ·        ·
    32  ·                         vectorized   true         ·        ·
    33  limit                     ·            ·            (w)      +w
    34   │                        count        25           ·        ·
    35   └── distinct             ·            ·            (w)      +w
    36        │                   distinct on  w            ·        ·
    37        │                   order key    w            ·        ·
    38        └── limit           ·            ·            (w)      +w
    39             │              count        100          ·        ·
    40             └── sort       ·            ·            (w)      +w
    41                  │         order        +w           ·        ·
    42                  └── scan  ·            ·            (w)      ·
    43  ·                         table        t@primary    ·        ·
    44  ·                         spans        FULL SCAN    ·        ·
    45  
    46  query TTTTT
    47  EXPLAIN (VERBOSE) SELECT k, v FROM t ORDER BY k LIMIT 5
    48  ----
    49  ·     distributed  false         ·       ·
    50  ·     vectorized   true          ·       ·
    51  scan  ·            ·             (k, v)  +k
    52  ·     table        t@primary     ·       ·
    53  ·     spans        LIMITED SCAN  ·       ·
    54  ·     limit        5             ·       ·
    55  
    56  query TTTTT
    57  EXPLAIN (VERBOSE) SELECT k, v FROM t ORDER BY k OFFSET 5
    58  ----
    59  ·          distributed  false      ·       ·
    60  ·          vectorized   true       ·       ·
    61  limit      ·            ·          (k, v)  +k
    62   │         offset       5          ·       ·
    63   └── scan  ·            ·          (k, v)  +k
    64  ·          table        t@primary  ·       ·
    65  ·          spans        FULL SCAN  ·       ·
    66  
    67  query TTTTT
    68  EXPLAIN (VERBOSE) SELECT k, v FROM t ORDER BY v LIMIT (1+4) OFFSET 1
    69  ----
    70  ·          distributed  false         ·       ·
    71  ·          vectorized   true          ·       ·
    72  limit      ·            ·             (k, v)  +v
    73   │         offset       1             ·       ·
    74   └── scan  ·            ·             (k, v)  +v
    75  ·          table        t@t_v_idx     ·       ·
    76  ·          spans        LIMITED SCAN  ·       ·
    77  ·          limit        6             ·       ·
    78  
    79  query TTTTT
    80  EXPLAIN (VERBOSE) SELECT k, v FROM t ORDER BY v DESC LIMIT (1+4) OFFSET 1
    81  ----
    82  ·             distributed  false         ·       ·
    83  ·             vectorized   true          ·       ·
    84  limit         ·            ·             (k, v)  -v
    85   │            offset       1             ·       ·
    86   └── revscan  ·            ·             (k, v)  -v
    87  ·             table        t@t_v_idx     ·       ·
    88  ·             spans        LIMITED SCAN  ·       ·
    89  ·             limit        6             ·       ·
    90  
    91  query TTTTT
    92  EXPLAIN (VERBOSE) SELECT sum(w) FROM t GROUP BY k, v ORDER BY v DESC LIMIT 10
    93  ----
    94  ·                         distributed  false            ·                       ·
    95  ·                         vectorized   true             ·                       ·
    96  render                    ·            ·                (sum)                   ·
    97   │                        render 0     sum              ·                       ·
    98   └── limit                ·            ·                (k, sum, any_not_null)  -any_not_null
    99        │                   count        10               ·                       ·
   100        └── sort            ·            ·                (k, sum, any_not_null)  -any_not_null
   101             │              order        -any_not_null    ·                       ·
   102             └── group      ·            ·                (k, sum, any_not_null)  ·
   103                  │         aggregate 0  k                ·                       ·
   104                  │         aggregate 1  sum(w)           ·                       ·
   105                  │         aggregate 2  any_not_null(v)  ·                       ·
   106                  │         group by     k                ·                       ·
   107                  │         ordered      +k               ·                       ·
   108                  └── scan  ·            ·                (k, v, w)               +k
   109  ·                         table        t@primary        ·                       ·
   110  ·                         spans        FULL SCAN        ·                       ·
   111  
   112  query TTTTT
   113  EXPLAIN (VERBOSE) SELECT k FROM (SELECT k, v FROM t ORDER BY v LIMIT 4)
   114  ----
   115  ·          distributed  false         ·       ·
   116  ·          vectorized   true          ·       ·
   117  render     ·            ·             (k)     ·
   118   │         render 0     k             ·       ·
   119   └── scan  ·            ·             (k, v)  ·
   120  ·          table        t@t_v_idx     ·       ·
   121  ·          spans        LIMITED SCAN  ·       ·
   122  ·          limit        4             ·       ·
   123  
   124  query TTTTT
   125  EXPLAIN (VERBOSE) SELECT k FROM (SELECT k, v, w FROM t ORDER BY v LIMIT 4)
   126  ----
   127  ·          distributed  false         ·       ·
   128  ·          vectorized   true          ·       ·
   129  render     ·            ·             (k)     ·
   130   │         render 0     k             ·       ·
   131   └── scan  ·            ·             (k, v)  ·
   132  ·          table        t@t_v_idx     ·       ·
   133  ·          spans        LIMITED SCAN  ·       ·
   134  ·          limit        4             ·       ·
   135  
   136  query TTTTT
   137  EXPLAIN (VERBOSE) SELECT k FROM (SELECT k FROM t LIMIT 5) WHERE k != 2
   138  ----
   139  ·          distributed  false         ·    ·
   140  ·          vectorized   true          ·    ·
   141  filter     ·            ·             (k)  ·
   142   │         filter       k != 2        ·    ·
   143   └── scan  ·            ·             (k)  ·
   144  ·          table        t@t_v_idx     ·    ·
   145  ·          spans        LIMITED SCAN  ·    ·
   146  ·          limit        5             ·    ·
   147  
   148  query TTTTT
   149  EXPLAIN (VERBOSE) SELECT k, w FROM t WHERE v >= 1 AND v <= 100 LIMIT 10
   150  ----
   151  ·               distributed  false                    ·          ·
   152  ·               vectorized   true                     ·          ·
   153  render          ·            ·                        (k, w)     ·
   154   │              render 0     k                        ·          ·
   155   │              render 1     w                        ·          ·
   156   └── limit      ·            ·                        (k, v, w)  ·
   157        │         count        10                       ·          ·
   158        └── scan  ·            ·                        (k, v, w)  ·
   159  ·               table        t@primary                ·          ·
   160  ·               spans        FULL SCAN                ·          ·
   161  ·               filter       (v >= 1) AND (v <= 100)  ·          ·
   162  
   163  query TTTTT
   164  EXPLAIN (VERBOSE) SELECT k, w FROM t WHERE v >= 1 AND v <= 100 ORDER BY v LIMIT 10
   165  ----
   166  ·                distributed  false      ·          ·
   167  ·                vectorized   true       ·          ·
   168  render           ·            ·          (k, w)     ·
   169   │               render 0     k          ·          ·
   170   │               render 1     w          ·          ·
   171   └── index-join  ·            ·          (k, v, w)  +v
   172        │          table        t@primary  ·          ·
   173        │          key columns  k          ·          ·
   174        └── scan   ·            ·          (k, v)     +v
   175  ·                table        t@t_v_idx  ·          ·
   176  ·                spans        /1-/101    ·          ·
   177  ·                limit        10         ·          ·
   178  
   179  query TTTTT
   180  EXPLAIN (VERBOSE) SELECT k, w FROM (SELECT * FROM t WHERE v >= 1 AND v <= 100 ORDER BY k LIMIT 10) ORDER BY v
   181  ----
   182  ·                    distributed  false                    ·          ·
   183  ·                    vectorized   true                     ·          ·
   184  render               ·            ·                        (k, w)     ·
   185   │                   render 0     k                        ·          ·
   186   │                   render 1     w                        ·          ·
   187   └── sort            ·            ·                        (k, v, w)  +v
   188        │              order        +v                       ·          ·
   189        └── limit      ·            ·                        (k, v, w)  +k
   190             │         count        10                       ·          ·
   191             └── scan  ·            ·                        (k, v, w)  +k
   192  ·                    table        t@primary                ·          ·
   193  ·                    spans        FULL SCAN                ·          ·
   194  ·                    filter       (v >= 1) AND (v <= 100)  ·          ·
   195  
   196  # Regression test for #47283: scan with both hard limit and soft limit.
   197  statement ok
   198  CREATE TABLE t_47283(k INT PRIMARY KEY, a INT)
   199  
   200  # The scan should have a hard limit.
   201  query TTTTT
   202  EXPLAIN (VERBOSE) SELECT * FROM (SELECT * FROM t_47283 ORDER BY k LIMIT 4) WHERE a > 5 LIMIT 1
   203  ----
   204  ·               distributed  false            ·       ·
   205  ·               vectorized   true             ·       ·
   206  limit           ·            ·                (k, a)  ·
   207   │              count        1                ·       ·
   208   └── filter     ·            ·                (k, a)  ·
   209        │         filter       a > 5            ·       ·
   210        └── scan  ·            ·                (k, a)  ·
   211  ·               table        t_47283@primary  ·       ·
   212  ·               spans        LIMITED SCAN     ·       ·
   213  ·               limit        4                ·       ·