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

JOIN query not covered

    XMLWordPrintable

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 6.6.3, Neo
    • Neo
    • query
    • None
    • Untriaged
    • 1
    • Unknown

    Description

      DROP INDEX default.ix11;
      DROP INDEX default.ix12;
      CREATE INDEX ix11 ON `default` ( ALL ARRAY item.n FOR item IN items WHEN item.type = "al" END) WHERE type = "ll";
      CREATE INDEX ix12 ON `default` ( l , n, v) WHERE type = "rr";
      EXPLAIN SELECT f.*
      FROM ( SELECT item.n, "" AS v
             FROM default AS o
             UNNEST o.items AS item
             WHERE  item.n = "" AND o.type = "ll" AND item.type = "al" ) AS f
      JOIN default AS c
      ON f.n = c.n AND f.v = c.v AND c.type = "rr" AND c.l = "l";
      

       EXPLAIN SELECT f.* FROM ( SELECT item.n, "" AS v FROM default AS o UNNEST o.items AS item WHERE  item.n = "" AND o.type = "ll" AND item.type = "al" ) AS f JOIN default AS c ON f.n = c.n AND f.v = c.v AND c.type = "rr" AND c.l = "l";
      {
          "requestID": "f8abaafd-6134-4ee0-9b5a-bffbb3f8c6b6",
          "signature": "json",
          "results": [
          {
              "plan": {
                  "#operator": "Sequence",
                  "~children": [
                      {
                          "#operator": "Sequence",
                          "~children": [
                              {
                                  "#operator": "IndexScan3",
                                  "as": "o",
                                  "covers": [
                                      "cover ((`item`.`n`))",
                                      "cover ((meta(`o`).`id`))"
                                  ],
                                  "filter": "((cover ((`o`.`type`)) = \"ll\") and cover (is_array((`o`.`items`))))",
                                  "filter_covers": {
                                      "cover (((`o`.`items`) \u003c {}))": true,
                                      "cover (([] \u003c= (`o`.`items`)))": true,
                                      "cover ((`item`.`type`))": "al",
                                      "cover ((`o`.`type`))": "ll",
                                      "cover (is_array((`o`.`items`)))": true
                                  },
                                  "index": "ix11",
                                  "index_id": "c823ac0cd3e2e627",
                                  "keyspace": "default",
                                  "namespace": "default",
                                  "spans": [
                                      {
                                          "exact": true,
                                          "range": [
                                              {
                                                  "high": "\"\"",
                                                  "inclusion": 3,
                                                  "index_key": "(all (array (`item`.`n`) for `item` in `items` when ((`item`.`type`) = \"al\") end))",
                                                  "low": "\"\""
                                              }
                                          ]
                                      }
                                  ],
                                  "using": "gsi"
                              },
                              {
                                  "#operator": "Parallel",
                                  "~child": {
                                      "#operator": "Sequence",
                                      "~children": [
                                          {
                                              "#operator": "Filter",
                                              "condition": "((cover ((`item`.`n`)) = \"\") and (cover ((`item`.`type`)) = \"al\"))"
                                          },
                                          {
                                              "#operator": "InitialProject",
                                              "result_terms": [
                                                  {
                                                      "expr": "cover ((`item`.`n`))"
                                                  },
                                                  {
                                                      "as": "v",
                                                      "expr": "\"\""
                                                  }
                                              ]
                                          }
                                      ]
                                  }
                              }
                          ]
                      },
                      {
                          "#operator": "Alias",
                          "as": "f"
                      },
                      {
                          "#operator": "Parallel",
                          "~child": {
                              "#operator": "Sequence",
                              "~children": [
                                  {
                                      "#operator": "NestedLoopJoin",
                                      "alias": "c",
                                      "on_clause": "(((((`f`.`n`) = (`c`.`n`)) and ((`f`.`v`) = (`c`.`v`))) and ((`c`.`type`) = \"rr\")) and ((`c`.`l`) = \"l\"))",
                                      "~child": {
                                          "#operator": "Sequence",
                                          "~children": [
                                              {
                                                  "#operator": "IndexScan3",
                                                  "as": "c",
                                                  "index": "ix12",
                                                  "index_id": "543c3714c85d3138",
                                                  "index_projection": {
                                                      "primary_key": true
                                                  },
                                                  "keyspace": "default",
                                                  "namespace": "default",
                                                  "nested_loop": true,
                                                  "spans": [
                                                      {
                                                          "exact": true,
                                                          "range": [
                                                              {
                                                                  "high": "\"l\"",
                                                                  "inclusion": 3,
                                                                  "index_key": "`l`",
                                                                  "low": "\"l\""
                                                              },
                                                              {
                                                                  "high": "(`f`.`n`)",
                                                                  "inclusion": 3,
                                                                  "index_key": "`n`",
                                                                  "low": "(`f`.`n`)"
                                                              },
                                                              {
                                                                  "high": "(`f`.`v`)",
                                                                  "inclusion": 3,
                                                                  "index_key": "`v`",
                                                                  "low": "(`f`.`v`)"
                                                              }
                                                          ]
                                                      }
                                                  ],
                                                  "using": "gsi"
                                              },
                                              {
                                                  "#operator": "Fetch",
                                                  "as": "c",
                                                  "keyspace": "default",
                                                  "namespace": "default",
                                                  "nested_loop": true
                                              },
                                              {
                                                  "#operator": "Parallel",
                                                  "~child": {
                                                      "#operator": "Sequence",
                                                      "~children": [
                                                          {
                                                              "#operator": "Filter",
                                                              "condition": "(((`c`.`type`) = \"rr\") and ((`c`.`l`) = \"l\"))"
                                                          }
                                                      ]
                                                  }
                                              }
                                          ]
                                      }
                                  },
                                  {
                                      "#operator": "InitialProject",
                                      "result_terms": [
                                          {
                                              "expr": "`f`",
                                              "star": true
                                          }
                                      ]
                                  }
                              ]
                          }
                      }
                  ]
              },
              "text": "SELECT f.* FROM ( SELECT item.n, \"\" AS v FROM default AS o UNNEST o.items AS item WHERE  item.n = \"\" AND o.type = \"ll\" AND item.type = \"al\" ) AS f JOIN default AS c ON f.n = c.n AND f.v = c.v AND c.type = \"rr\" AND c.l = \"l\";"
          }
          ],
          "status": "success",
          "metrics": {
              "elapsedTime": "9.399934ms",
              "executionTime": "9.300051ms",
              "resultCount": 1,
              "resultSize": 8447,
              "serviceLoad": 2
          }
      }
      

      Why right side of JOIN (c) is not covered?
      If we remove item.type = "al" from index and query removed it covers. Interesting thing is FROM subquery where index is used is covered not sure why that impacting outside query.

      Attachments

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

        Activity

          Build couchbase-server-7.1.0-1837 contains query commit 28fe499 with commit message:
          MB-49859 Proper marking of identifiers in filter covers when covered unnest scan is used

          build-team Couchbase Build Team added a comment - Build couchbase-server-7.1.0-1837 contains query commit 28fe499 with commit message: MB-49859 Proper marking of identifiers in filter covers when covered unnest scan is used

          Build couchbase-server-7.1.0-1839 contains query commit 74117f4 with commit message:
          MB-49859 Avoid regenerating of new expression for filter covers

          build-team Couchbase Build Team added a comment - Build couchbase-server-7.1.0-1839 contains query commit 74117f4 with commit message: MB-49859 Avoid regenerating of new expression for filter covers

          Verified on 7.1.0-2021

          cbq> EXPLAIN SELECT f.* FROM ( SELECT item.n, "" AS v FROM default AS o UNNEST o.items AS item WHERE  item.n = "" AND o.type = "ll" AND item.type = "al" ) AS f JOIN default AS c ON f.n = c.n AND f.v = c.v AND c.type = "rr" AND c.l = "l";
          {
              "requestID": "e99e3b3c-ee77-4fcc-82fe-1a2256abb04e",
              "signature": "json",
              "results": [
              {
                  "plan": {
                      "#operator": "Sequence",
                      "~children": [
                          {
                              "#operator": "Sequence",
                              "~children": [
                                  {
                                      "#operator": "IndexScan3",
                                      "as": "o",
                                      "covers": [
                                          "cover ((`item`.`n`))",
                                          "cover ((meta(`o`).`id`))"
                                      ],
                                      "filter": "((cover ((`o`.`type`)) = \"ll\") and cover (is_array((`o`.`items`))))",
                                      "filter_covers": {
                                          "cover (((`o`.`items`) \u003c {}))": true,
                                          "cover (([] \u003c= (`o`.`items`)))": true,
                                          "cover ((`item`.`type`))": "al",
                                          "cover ((`o`.`type`))": "ll",
                                          "cover (is_array((`o`.`items`)))": true
                                      },
                                      "index": "ix11",
                                      "index_id": "c3c1062197bffc5f",
                                      "keyspace": "default",
                                      "namespace": "default",
                                      "spans": [
                                          {
                                              "exact": true,
                                              "range": [
                                                  {
                                                      "high": "\"\"",
                                                      "inclusion": 3,
                                                      "index_key": "(all (array (`item`.`n`) for `item` in `items` when ((`item`.`type`) = \"al\") end))",
                                                      "low": "\"\""
                                                  }
                                              ]
                                          }
                                      ],
                                      "using": "gsi"
                                  },
                                  {
                                      "#operator": "Parallel",
                                      "~child": {
                                          "#operator": "Sequence",
                                          "~children": [
                                              {
                                                  "#operator": "Filter",
                                                  "condition": "((cover ((`item`.`n`)) = \"\") and (cover ((`item`.`type`)) = \"al\"))"
                                              },
                                              {
                                                  "#operator": "InitialProject",
                                                  "result_terms": [
                                                      {
                                                          "expr": "cover ((`item`.`n`))"
                                                      },
                                                      {
                                                          "as": "v",
                                                          "expr": "\"\""
                                                      }
                                                  ]
                                              }
                                          ]
                                      }
                                  }
                              ]
                          },
                          {
                              "#operator": "Alias",
                              "as": "f"
                          },
                          {
                              "#operator": "Parallel",
                              "~child": {
                                  "#operator": "Sequence",
                                  "~children": [
                                      {
                                          "#operator": "NestedLoopJoin",
                                          "alias": "c",
                                          "on_clause": "(((((`f`.`n`) = cover ((`c`.`n`))) and ((`f`.`v`) = cover ((`c`.`v`)))) and (cover ((`c`.`type`)) = \"rr\")) and (cover ((`c`.`l`)) = \"l\"))",
                                          "~child": {
                                              "#operator": "Sequence",
                                              "~children": [
                                                  {
                                                      "#operator": "IndexScan3",
                                                      "as": "c",
                                                      "covers": [
                                                          "cover ((`c`.`l`))",
                                                          "cover ((`c`.`n`))",
                                                          "cover ((`c`.`v`))",
                                                          "cover ((meta(`c`).`id`))"
                                                      ],
                                                      "filter": "((cover ((`c`.`type`)) = \"rr\") and (cover ((`c`.`l`)) = \"l\"))",
                                                      "filter_covers": {
                                                          "cover ((`c`.`type`))": "rr"
                                                      },
                                                      "index": "ix12",
                                                      "index_id": "8ab41662a8a52ae4",
                                                      "index_projection": {
                                                          "entry_keys": [
                                                              0,
                                                              1,
                                                              2
                                                          ]
                                                      },
                                                      "keyspace": "default",
                                                      "namespace": "default",
                                                      "nested_loop": true,
                                                      "spans": [
                                                          {
                                                              "exact": true,
                                                              "range": [
                                                                  {
                                                                      "high": "\"l\"",
                                                                      "inclusion": 3,
                                                                      "index_key": "`l`",
                                                                      "low": "\"l\""
                                                                  },
                                                                  {
                                                                      "high": "(`f`.`n`)",
                                                                      "inclusion": 3,
                                                                      "index_key": "`n`",
                                                                      "low": "(`f`.`n`)"
                                                                  },
                                                                  {
                                                                      "high": "(`f`.`v`)",
                                                                      "inclusion": 3,
                                                                      "index_key": "`v`",
                                                                      "low": "(`f`.`v`)"
                                                                  }
                                                              ]
                                                          }
                                                      ],
                                                      "using": "gsi"
                                                  }
                                              ]
                                          }
                                      },
                                      {
                                          "#operator": "InitialProject",
                                          "result_terms": [
                                              {
                                                  "expr": "`f`",
                                                  "star": true
                                              }
                                          ]
                                      }
                                  ]
                              }
                          }
                      ]
                  },
                  "text": "SELECT f.* FROM ( SELECT item.n, \"\" AS v FROM default AS o UNNEST o.items AS item WHERE  item.n = \"\" AND o.type = \"ll\" AND item.type = \"al\" ) AS f JOIN default AS c ON f.n = c.n AND f.v = c.v AND c.type = \"rr\" AND c.l = \"l\";"
              }
              ],
              "status": "success",
              "metrics": {
                  "elapsedTime": "9.452447ms",
                  "executionTime": "9.196428ms",
                  "resultCount": 1,
                  "resultSize": 8229,
                  "serviceLoad": 6
              }
          }
           

          pierre.regazzoni Pierre Regazzoni added a comment - Verified on 7.1.0-2021 cbq> EXPLAIN SELECT f.* FROM ( SELECT item.n, "" AS v FROM default AS o UNNEST o.items AS item WHERE  item.n = "" AND o.type = "ll" AND item.type = "al" ) AS f JOIN default AS c ON f.n = c.n AND f.v = c.v AND c.type = "rr" AND c.l = "l" ; {     "requestID" : "e99e3b3c-ee77-4fcc-82fe-1a2256abb04e" ,     "signature" : "json" ,     "results" : [     {         "plan" : {             "#operator" : "Sequence" ,             "~children" : [                 {                     "#operator" : "Sequence" ,                     "~children" : [                         {                             "#operator" : "IndexScan3" ,                             "as" : "o" ,                             "covers" : [                                 "cover ((`item`.`n`))" ,                                 "cover ((meta(`o`).`id`))"                             ],                             "filter" : "((cover ((`o`.`type`)) = \"ll\") and cover (is_array((`o`.`items`))))" ,                             "filter_covers" : {                                 "cover (((`o`.`items`) \u003c {}))" : true ,                                 "cover (([] \u003c= (`o`.`items`)))" : true ,                                 "cover ((`item`.`type`))" : "al" ,                                 "cover ((`o`.`type`))" : "ll" ,                                 "cover (is_array((`o`.`items`)))" : true                             },                             "index" : "ix11" ,                             "index_id" : "c3c1062197bffc5f" ,                             "keyspace" : "default" ,                             "namespace" : "default" ,                             "spans" : [                                 {                                     "exact" : true ,                                     "range" : [                                         {                                             "high" : "\"\"" ,                                             "inclusion" : 3 ,                                             "index_key" : "(all (array (`item`.`n`) for `item` in `items` when ((`item`.`type`) = \"al\") end))" ,                                             "low" : "\"\""                                         }                                     ]                                 }                             ],                             "using" : "gsi"                         },                         {                             "#operator" : "Parallel" ,                             "~child" : {                                 "#operator" : "Sequence" ,                                 "~children" : [                                     {                                         "#operator" : "Filter" ,                                         "condition" : "((cover ((`item`.`n`)) = \"\") and (cover ((`item`.`type`)) = \"al\"))"                                     },                                     {                                         "#operator" : "InitialProject" ,                                         "result_terms" : [                                             {                                                 "expr" : "cover ((`item`.`n`))"                                             },                                             {                                                 "as" : "v" ,                                                 "expr" : "\"\""                                             }                                         ]                                     }                                 ]                             }                         }                     ]                 },                 {                     "#operator" : "Alias" ,                     "as" : "f"                 },                 {                     "#operator" : "Parallel" ,                     "~child" : {                         "#operator" : "Sequence" ,                         "~children" : [                             {                                 "#operator" : "NestedLoopJoin" ,                                 "alias" : "c" ,                                 "on_clause" : "(((((`f`.`n`) = cover ((`c`.`n`))) and ((`f`.`v`) = cover ((`c`.`v`)))) and (cover ((`c`.`type`)) = \"rr\")) and (cover ((`c`.`l`)) = \"l\"))" ,                                 "~child" : {                                     "#operator" : "Sequence" ,                                     "~children" : [                                         {                                             "#operator" : "IndexScan3" ,                                             "as" : "c" ,                                             "covers" : [                                                 "cover ((`c`.`l`))" ,                                                 "cover ((`c`.`n`))" ,                                                 "cover ((`c`.`v`))" ,                                                 "cover ((meta(`c`).`id`))"                                             ],                                             "filter" : "((cover ((`c`.`type`)) = \"rr\") and (cover ((`c`.`l`)) = \"l\"))" ,                                             "filter_covers" : {                                                 "cover ((`c`.`type`))" : "rr"                                             },                                             "index" : "ix12" ,                                             "index_id" : "8ab41662a8a52ae4" ,                                             "index_projection" : {                                                 "entry_keys" : [                                                     0 ,                                                     1 ,                                                     2                                                 ]                                             },                                             "keyspace" : "default" ,                                             "namespace" : "default" ,                                             "nested_loop" : true ,                                             "spans" : [                                                 {                                                     "exact" : true ,                                                     "range" : [                                                         {                                                             "high" : "\"l\"" ,                                                             "inclusion" : 3 ,                                                             "index_key" : "`l`" ,                                                             "low" : "\"l\""                                                         },                                                         {                                                             "high" : "(`f`.`n`)" ,                                                             "inclusion" : 3 ,                                                             "index_key" : "`n`" ,                                                             "low" : "(`f`.`n`)"                                                         },                                                         {                                                             "high" : "(`f`.`v`)" ,                                                             "inclusion" : 3 ,                                                             "index_key" : "`v`" ,                                                             "low" : "(`f`.`v`)"                                                         }                                                     ]                                                 }                                             ],                                             "using" : "gsi"                                         }                                     ]                                 }                             },                             {                                 "#operator" : "InitialProject" ,                                 "result_terms" : [                                     {                                         "expr" : "`f`" ,                                         "star" : true                                     }                                 ]                             }                         ]                     }                 }             ]         },         "text" : "SELECT f.* FROM ( SELECT item.n, \"\" AS v FROM default AS o UNNEST o.items AS item WHERE  item.n = \"\" AND o.type = \"ll\" AND item.type = \"al\" ) AS f JOIN default AS c ON f.n = c.n AND f.v = c.v AND c.type = \"rr\" AND c.l = \"l\";"     }     ],     "status" : "success" ,     "metrics" : {         "elapsedTime" : "9.452447ms" ,         "executionTime" : "9.196428ms" ,         "resultCount" : 1 ,         "resultSize" : 8229 ,         "serviceLoad" : 6     } }

          People

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

            Dates

              Created:
              Updated:
              Resolved:

              Gerrit Reviews

                There are no open Gerrit changes

                PagerDuty