Uploaded image for project: 'Documentation'
  1. Documentation
  2. DOCS-11476

Docs for SERVER-23202: Query planner does not trim certain bounds-generating inequality predicates from expression tree

    XMLWordPrintable

    Details

    • Type: Task
    • Status: Closed
    • Priority: Major - P3
    • Resolution: Gone away
    • Affects Version/s: None
    • Fix Version/s: 3.7.4
    • Component/s: None
    • Labels:

      Description

      Documentation Request Summary:

      Please discuss with Nicholas about whether changes are necessary or not.

      Engineering Ticket Description:

      The query planner does not trim bounds-generating inequality predicates from the expression tree, when the value being compared to is one of the following BSON types:

      • Object
      • Undefined
      • RegEx
      • DBRef
      • Code
      • Symbol
      • CodeWScope

      As a result, such predicates are not eligible for covering behavior, and require an unnecessary additional match operation after the document is fetched from disk.

      Reproduce as follows:

      > db.foo.drop()
      true
      > db.foo.ensureIndex({a:1})
      {
      	"createdCollectionAutomatically" : true,
      	"numIndexesBefore" : 1,
      	"numIndexesAfter" : 2,
      	"ok" : 1
      }
      > db.foo.find({a:{$gte:function(){ return 0; }}}).explain('queryPlanner').queryPlanner.winningPlan
      {
      	"stage" : "FETCH",  // Unexpected: FETCH does not need a filter with $gte predicate here.
      	"filter" : {
      		"a" : {
      			"$gte" : function (){ return 0; }
      		}
      	},
      	"inputStage" : {
      		"stage" : "IXSCAN",
      		"keyPattern" : {
      			"a" : 1
      		},
      		"indexName" : "a_1",
      		"isMultiKey" : false,
      		"isUnique" : false,
      		"isSparse" : false,
      		"isPartial" : false,
      		"indexVersion" : 1,
      		"direction" : "forward",
      		"indexBounds" : {
      			"a" : [
      				"[function (){ return 0; }, CodeWScope( , {}))"
      			]
      		}
      	}
      }
      > db.foo.find({a:{$eq:function(){ return 0; }}}).explain('queryPlanner').queryPlanner.winningPlan
      {
      	"stage" : "FETCH",  // Expected: No filter with $eq predicate here.
      	"inputStage" : {
      		"stage" : "IXSCAN",
      		"keyPattern" : {
      			"a" : 1
      		},
      		"indexName" : "a_1",
      		"isMultiKey" : false,
      		"isUnique" : false,
      		"isSparse" : false,
      		"isPartial" : false,
      		"indexVersion" : 1,
      		"direction" : "forward",
      		"indexBounds" : {
      			"a" : [
      				"[function (){ return 0; }, function (){ return 0; }]"
      			]
      		}
      	}
      }
      >
      

        Attachments

          Issue Links

            Activity

              People

              Assignee:
              Unassigned Unassigned
              Reporter:
              kay.kim Kay Kim (Inactive)
              Participants:
              Last commenter:
              Allison Reinheimer Moore Allison Reinheimer Moore
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

                Dates

                Created:
                Updated:
                Resolved:
                Days since reply:
                3 years, 31 weeks, 2 days ago
                Date of 1st Reply: