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

Use heuristics to choose selective index bounds within $all

    Details

    • Type: Improvement
    • Status: Open
    • Priority: Minor - P4
    • Resolution: Unresolved
    • Affects Version/s: 2.0.3
    • Fix Version/s: Backlog
    • Component/s: Querying
    • Labels:
      None

      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

          Issue Links

            Activity

              People

              • Votes:
                8 Vote for this issue
                Watchers:
                7 Start watching this issue

                Dates

                • Created:
                  Updated: