Uploaded image for project: 'Core Server'
  1. Core Server
  2. SERVER-5331

Use heuristics to choose selective index bounds within $all

    XMLWordPrintableJSON

Details

    • Icon: Improvement Improvement
    • Resolution: Unresolved
    • Icon: Minor - P4 Minor - P4
    • None
    • 2.0.3
    • Querying
    • None
    • Query Optimization

    Description

      I was just tracking some slow queries and found queries like:

      db.Example.find({ "indices.text":

      { $all: [ "le", "mois", "suivant" ] }

      , lc: "fra", group: "all" })

      giving

      {
      "cursor" : "BtreeCursor indices.text_1_lc_1_group_1",
      "nscanned" : 244471,
      "nscannedObjects" : 244471,
      "n" : 34,
      "millis" : 6211,
      "nYields" : 6,
      "nChunkSkips" : 0,
      "isMultiKey" : true,
      "indexOnly" : false,
      "indexBounds" :

      { "indices.text" : [ [ "le", "le" ] ], "lc" : [ [ "fra", "fra" ] ], "group" : [ [ "all", "all" ] ] }

      }

      but

      > db.Example.find({ "indices.text":

      { $all: [ "suivant", "le", "mois" ] }

      , lc: "fra", group: "all" }).explain();
      {
      "cursor" : "BtreeCursor indices.text_1_lc_1_group_1",
      "nscanned" : 1948,
      "nscannedObjects" : 1948,
      "n" : 34,
      "millis" : 102,
      "nYields" : 0,
      "nChunkSkips" : 0,
      "isMultiKey" : true,
      "indexOnly" : false,
      "indexBounds" :

      { "indices.text" : [ [ "suivant", "suivant" ] ], "lc" : [ [ "fra", "fra" ] ], "group" : [ [ "all", "all" ] ] }

      }

      I can manually re-order my inputs to the $all putting longest strings first, but perhaps Mongo should have similar logic built in since longer strings should naturally be less common and therefore need less scanning?

      Attachments

        Activity

          People

            backlog-query-optimization Backlog - Query Optimization
            niccottrell Nic Cottrell (Personal)
            Votes:
            8 Vote for this issue
            Watchers:
            11 Start watching this issue

            Dates

              Created:
              Updated: