Details
Description
Queries that can use a compound index to provide a sort on a subset of fields in the key pattern are sometimes given an unnecessary in-memory sort if an equality predicate is given on the sort field.
Reproduce with:
> db.foo.ensureIndex({a:1,b:1})
|
{
|
"createdCollectionAutomatically" : true, |
"numIndexesBefore" : 1, |
"numIndexesAfter" : 2, |
"ok" : 1 |
}
|
> db.foo.find({a:1}).sort({b:1}).explain().scanAndOrder
|
false // CORRECT |
> db.foo.find({a:1,b:{$gt:0}}).sort({b:1}).explain().scanAndOrder
|
false // CORRECT |
> db.foo.find({a:1,b:/hello/}).sort({b:1}).explain().scanAndOrder
|
false // CORRECT |
> db.foo.find({a:1,b:1}).sort({b:1}).explain().scanAndOrder
|
true // INCORRECT |
Attachments
Issue Links
- is related to
-
SERVER-14034 Sorted $in query with large number of elements can't use merge sort
-
- Closed
-