Составной индекс MongoDB - также встроен в сортировку _id?

У меня есть составной индекс

{ userID:1, connectionStatus: 1, userTargetLastName: 1})

Я хочу поддерживать два запроса:

UserConnection.find( { $and : [ { userID : req.decoded.id }, { connectionStatus : 'accepted' } ] })
                .sort({'_id': -1}).exec()

а также

UserConnection.find( { $and : [ { userID : req.decoded.id }, { connectionStatus : 'accepted' } ] })
                .sort({'userTargetLastName': 1}).exec()

Я не понимаю, нужен ли мне второй составной индекс для сортировки по _id или он «встроен» в мой составной индекс? (согласно документам mongodb, мой составной индекс также должен поддерживать запросы userID: 1, connectionStatus: 1 (но в каком порядке я могу их сортировать? По _id?). Так что мне нужно добавить еще один составной индекс либо для _id, либо для созданного ?

 { userID:1, connectionStatus: 1, created: -1})

person axelwittmann    schedule 28.09.2017    source источник


Ответы (1)


Вы запрашиваете только userID и connectionStatus, поэтому составной индекс не обязательно должен включать userTargetLastName. Сортировка выполняется по результатам запроса, и не обязательно иметь индекс в поле сортировки, поэтому не важно включать _id в индекс.

Лучший способ проверить использование индекса — использовать функцию explain() с вашим запросом. Это многое скажет вам о том, какой индекс используется и насколько он эффективен (количество отсканированных документов и т. д.).

person robjwilkins    schedule 28.09.2017
comment
спасибо, я должен был сказать, что хочу ограничить свои запросы до 10. Может быть, скажем, 200 результатов для идентификатора пользователя с определенным статусом соединения. Я хочу, чтобы 10 отсортировались либо по userTargetLastName, либо по _id (или по созданному). - person axelwittmann; 28.09.2017
comment
также спасибо за объяснение () - я буду использовать его сейчас, чтобы проверить, все ли работает так, как я хочу - person axelwittmann; 28.09.2017
comment
Вы также можете использовать объяснения (executionStats) и объяснения (allPlansExecution) для оптимизации вашего запроса. См. docs.mongodb.com/manual/reference/method/cursor.explain< /а> - person aloplop85; 23.05.2019