2013-10-08 2 views
0

Если у меня есть составной индекс: { a: -1, b: -1, c: -1 } могу ли я сортировать по { a: 1, b: 1, c: 1 } и все еще использовать составной индекс? По существу, сохранение порядка и относительной сортировки одинаково, в обратном порядке.Сортировка в обратном порядке составного индекса все еще действительна?

ответ

2

Да, MongoDB может использовать составной индекс для обратного сортировки по индексированным ключам.

Если у вас есть составной индекс на:

db.test.ensureIndex({a: -1, b: -1, c: -1}) 

Представлены результаты explain показывают, что BTreeCursor использовали

db.test.find().sort({a: 1, b:1, c:1}).explain() 

     "cursor" : "BtreeCursor a_-1_b_-1_c_-1 reverse", 
     "isMultiKey" : false, 
     "n" : 11, 
     "nscannedObjects" : 11, 
     "nscanned" : 11, 
     "nscannedObjectsAllPlans" : 11, 
... 

Индекс соединение будет использоваться, если изменить порядок сортировки всех от префиксов индекса.

Однако db.test.find().sort({a:1, b: 1, c: -1}), не сможет использовать индекс и, следовательно, будет использовать BasicCursor.

Смежные вопросы