Uploaded image for project: 'Couchbase Server'
  1. Couchbase Server
  2. MB-62157

Fetch and Cover present at the same time

    XMLWordPrintable

Details

    • Untriaged
    • 0
    • Unknown

    Description

      INSERT INTO default VALUES("doc1", {"c1": 10, "a1": [ "500", "656", "700" ]}),
                          VALUES("doc2", {"c1": 25, "a1": [ "50", "60", "75" ]}),
                          VALUES("doc3", {"c1": 5,  "a1": [ "11740", "12540", "15638" ]}),
                          VALUES("doc4", {"c1": 12, "a1": [ "692", "503", "180" ]}),
                          VALUES("doc5", {"a1": [ "55", "30", "66" ]});
       
      DROP index default.ix50;
      create index ix50 on default (DISTINCT ARRAY k FOR k IN a1 END, c1 DESC);
       
      EXPLAIN SELECT t.id
      FROM [ "656", "55","11740"] AS d
      JOIN (SELECT meta().id, o.c1
              FROM default AS o
              WHERE ANY k IN o.a1 SATISFIES k =  d END
              ORDER BY o.c1 DESC
              LIMIT 50) AS t ON 1 = 1
      ORDER BY t.c1 DESC
      LIMIT 50;

      cbq> EXPLAIN SELECT t.id FROM [ "656", "55","11740"] AS d JOIN (SELECT meta().id, o.c1 FROM default AS o WHERE ANY k IN o.a1 SATISFIES k =  d END ORDER BY o.c1 DESC LIMIT 50) AS t ON 1 = 1 ORDER BY t.c1 DESC LIMIT 50;
      {
          "requestID": "5010b463-2f66-43cd-ad43-a308b83936bd",
          "signature": "json",
          "results": [
          {
              "plan": {
                  "#operator": "Sequence",
                  "~children": [
                      {
                          "#operator": "Sequence",
                          "~children": [
                              {
                                  "#operator": "ExpressionScan",
                                  "alias": "d",
                                  "expr": "[\"656\", \"55\", \"11740\"]",
                                  "optimizer_estimates": {
                                      "cardinality": 3,
                                      "cost": 0.024,
                                      "fr_cost": 0.008,
                                      "size": 64
                                  },
                                  "uncorrelated": true
                              },
                              {
                                  "#operator": "Parallel",
                                  "~child": {
                                      "#operator": "Sequence",
                                      "~children": [
                                          {
                                              "#operator": "NestedLoopJoin",
                                              "alias": "t",
                                              "on_clause": "(1 = 1)",
                                              "~child": {
                                                  "#operator": "Sequence",
                                                  "~children": [
                                                      {
                                                          "#operator": "ExpressionScan",
                                                          "alias": "t",
                                                          "expr": "correlated (select cover ((meta(`o`).`id`)), cover ((`o`.`c1`)) from `default`:`default` as `o` where cover (any `k` in (`o`.`a1`) satisfies (`k` = `d`) end)  ORDER BY cover ((`o`.`c1`)) DESC limit 50)",
                                                          "nested_loop": true
                                                      }
                                                  ]
                                              }
                                          },
                                          {
                                              "#operator": "InitialProject",
                                              "preserve_order": true,
                                              "result_terms": [
                                                  {
                                                      "expr": "(`t`.`id`)"
                                                  }
                                              ]
                                          }
                                      ]
                                  }
                              }
                          ]
                      },
                      {
                          "#operator": "Order",
                          "flags": 6,
                          "limit": "50",
                          "sort_terms": [
                              {
                                  "desc": "\"desc\"",
                                  "expr": "(`t`.`c1`)"
                              }
                          ]
                      },
                      {
                          "#operator": "Limit",
                          "expr": "50"
                      }
                  ]
              },
              "text": "SELECT t.id FROM [ \"656\", \"55\",\"11740\"] AS d JOIN (SELECT meta().id, o.c1 FROM default AS o WHERE ANY k IN o.a1 SATISFIES k =  d END ORDER BY o.c1 DESC LIMIT 50) AS t ON 1 = 1 ORDER BY t.c1 DESC LIMIT 50;",
              "~subqueries": [
                  {
                      "correlated": true,
                      "plan": {
                          "#operator": "Sequence",
                          "~children": [
                              {
                                  "#operator": "Sequence",
                                  "~children": [
                                      {
                                          "#operator": "DistinctScan",
                                          "scan": {
                                              "#operator": "IndexScan3",
                                              "as": "o",
                                              "index": "ix50",
                                              "index_id": "7b88f880219a7640",
                                              "index_order": [
                                                  {
                                                      "desc": true,
                                                      "keypos": 1
                                                  }
                                              ],
                                              "index_projection": {
                                                  "primary_key": true
                                              },
                                              "keyspace": "default",
                                              "namespace": "default",
                                              "spans": [
                                                  {
                                                      "exact": true,
                                                      "range": [
                                                          {
                                                              "high": "`d`",
                                                              "inclusion": 3,
                                                              "index_key": "(distinct (array `k` for `k` in `a1` end))",
                                                              "low": "`d`"
                                                          }
                                                      ]
                                                  }
                                              ],
                                              "using": "gsi"
                                          }
                                      },
                                      {
                                          "#operator": "Fetch",
                                          "as": "o",
                                          "early_projection": [
                                              "a1",
                                              "c1"
                                          ],
                                          "keyspace": "default",
                                          "namespace": "default"
                                      },
                                      {
                                          "#operator": "Parallel",
                                          "maxParallelism": 1,
                                          "~child": {
                                              "#operator": "Sequence",
                                              "~children": [
                                                  {
                                                      "#operator": "Filter",
                                                      "condition": "cover (any `k` in (`o`.`a1`) satisfies (`k` = `d`) end)"
                                                  },
                                                  {
                                                      "#operator": "InitialProject",
                                                      "result_terms": [
                                                          {
                                                              "expr": "cover ((meta(`o`).`id`))"
                                                          },
                                                          {
                                                              "expr": "cover ((`o`.`c1`))"
                                                          }
                                                      ]
                                                  }
                                              ]
                                          }
                                      }
                                  ]
                              },
                              {
                                  "#operator": "Limit",
                                  "expr": "50"
                              }
                          ]
                      },
                      "subquery": "select cover ((meta(`o`).`id`)), cover ((`o`.`c1`)) from `default`:`default` as `o` where cover (any `k` in (`o`.`a1`) satisfies (`k` = `d`) end)  ORDER BY cover ((`o`.`c1`)) DESC limit 50"
                  }
              ]
          }
          ],
          "status": "success",
          "metrics": {
              "elapsedTime": "3.000291ms",
              "executionTime": "2.858208ms",
              "resultCount": 1,
              "resultSize": 7984,
              "serviceLoad": 2
          }
      }

      Subquery has Fetch also cover around expression this can result in wrong results.

      FYI: If use FLATTEN_KEYS() seems to correct

      Execute the query should return:

          "results": [
          {
              "id": "doc1"
          },
          {
              "id": "doc3"
          },
          {
              "id": "doc5"
          }
          ],
      
      

      Attachments

        No reviews matched the request. Check your Options in the drop-down menu of this sections header.

        Activity

          People

            pierre.regazzoni Pierre Regazzoni
            Sitaram.Vemulapalli Sitaram Vemulapalli
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              PagerDuty