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

Change in query plan for $elemMatch query

    XMLWordPrintable

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Major - P3
    • Resolution: Works as Designed
    • Affects Version/s: 2.5.4
    • Fix Version/s: None
    • Component/s: Querying
    • Labels:
    • Environment:
      db.serverBuildInfo()
      "version" : "2.5.5-pre-",
      "gitVersion" : "04221630900335fc6ee0d9922edae9d29f02d66d",
    • Operating System:
      ALL

      Description

      Testing query plans for $elemMatch queries. (Want to validate that adhoc queries supported by the array of

      {k: key, v: value}

      subdocuments still performs.

      Generation of test data:

      for (i=1; i<100000; i++) {
         searchTerms = [];
         for (j=1; j<=100 ; j++) {
            val = (i+j) % 10
            searchTerms[j-1] = {k: j, v: val}
         }
         db.searchTest.insert({"payload": "document " + i, "searchTerms": searchTerms});
      }
       
      db.searchTest.ensureIndex({"searchTerms.k": 1, "searchTerms.v": 1});

      2.4.6 explain output:

       
      > db.searchTest.find({searchTerms: {$elemMatch: {k:1, v: 7}}}).explain()
      {
      	"cursor" : "BtreeCursor searchTerms.k_1_searchTerms.v_1",
      	"isMultiKey" : true,
      	"n" : 10000,
      	"nscannedObjects" : 10000,
      	"nscanned" : 10000,
      	"nscannedObjectsAllPlans" : 10000,
      	"nscannedAllPlans" : 10000,
      	"scanAndOrder" : false,
      	"indexOnly" : false,
      	"nYields" : 0,
      	"nChunkSkips" : 0,
      	"millis" : 50,
      	"indexBounds" : {
      		"searchTerms.k" : [
      			[
      				1,
      				1
      			]
      		],
      		"searchTerms.v" : [
      			[
      				7,
      				7
      			]
      		]
      	},
      	"server" : "xxx:27018"
      }
       

      2.5.5-pre explain output

       
      > db.searchTest.find({searchTerms: {$elemMatch: {k:1, v: 7}}}).explain()
      {
      	"cursor" : "BasicCursor",
      	"n" : 10000,
      	"nscannedObjects" : 99999,
      	"nscanned" : 99999,
      	"nscannedObjectsAllPlans" : 100099,
      	"nscannedAllPlans" : 100099,
      	"scanAndOrder" : false,
      	"indexOnly" : false,
      	"nYields" : 781,
      	"nChunkSkips" : 0,
      	"millis" : 1566,
      	"server" : "xxx:27017"
      }
       

      Original index creation and explain testing was done with index intersection enabled, but I have since restarted mongod without index intersection enabled and 2.5.5-pre still fails to use the index.

        Attachments

          Activity

            People

            • Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: