MongoDB limit () и sort () Оптимизация - PullRequest
3 голосов
/ 14 марта 2012

Я пытаюсь понять, почему это происходит:

db.items.find({uid: {$in:[34, 54, 53,1,2,3,5,6,7]} }).limit(40).sort({_id:-1}).explain()

возвращает меня:

"cursor" : "BtreeCursor _id_-1_uid_1 multi",
"nscanned" : 167,
"nscannedObjects" : 40,
"n" : 40,
...

Однако без сортировки

db.items.find({uid: {$in:[34, 54, 53,1,2,3,5,6,7]} }).limit(40).explain()

возвращает меня:

"cursor" : "BtreeCursor uid_1 multi",
"nscanned" : 40,
"nscannedObjects" : 40,
"n" : 40,
...

Так что я не понимаю, почему, когда я добавляю сортировку, она сканирует больше документов? Я сортирую по id, также у меня есть этот индекс, чтобы попытаться улучшить " _id_-1_uid_1", но все равно он сканирует много документов.

Это огромная проблема в моем случае, потому что это моя локальная база данных, поэтому отсканировано всего несколько документов, однако на моем действующем сайте у меня отсканированы миллионы документов по причине, по которой я не знаю, что это есть.

Может кто-нибудь объяснить мне, что происходит?

1 Ответ

3 голосов
/ 14 марта 2012

В настоящее время (2012/3/14) это неразрешенная ошибка:

https://jira.mongodb.org/browse/SERVER-3310

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...