Предположим, я создаю индекс, подобный следующему: -
db.collection.createIndex( { propA: 1, propB: 1, propC:1 } )
И я запрашиваю следующее: -
db.collection.find({propB:'x', propC: 'y', propA:'z'})
Будет ли механизм запросов mongo использовать созданный выше индекс или нет. Имеет ли значение последовательность ключевых слов при использовании составного индекса при написании запроса?
2 ответа
Порядок ключей в запросе не имеет значения: MongoDB достаточно умен, чтобы просмотреть все запрашиваемые свойства и найти подходящий индекс.
Однако порядок ключей, определенных в индексе , имеет значение: составной индекс можно использовать для сопоставить запросы с любым префиксом его ключей в том порядке, в котором они определены в индексном документе. Таким образом, указанный выше индекс можно использовать для ответа на такие запросы, как {propA: 'x', propB: 'y'}
, но не для таких запросов, как {propB: 'y', propC: 'z'}
.
Вы можете использовать explain()
для расчета узнать, какой индекс MongoDB будет использовать для конкретного запроса.
Чтобы добавить к ответу Avish, такой индекс, состоящий из более чем одного поля, называется составным индексом. Порядок полей, перечисленных в составном индексе, очень важен. Вот почему:
Индекс будет содержать ссылки на документы, отсортированные сначала по значениям первого поля и в пределах каждого значения первого поля, отсортированные по значениям второго поля и в пределах каждого значения второго поля, отсортированные по значениям третьего поля. , и так далее.
Например, в вашем случае индекс будет содержать ссылки на документы, отсортированные сначала по значениям поля propA, а внутри каждого значения поля propA, отсортированные по значениям поля propB и в каждом значении поля propB, отсортированные по значения поля propC.
Так что имейте в виду, что следующие запросы будут использовать данный индекс:
- db.collection.find ({propA: 'z'})
- db.collection.find ({propB: 'x', propC: 'y', propA: 'z'})
- db.collection.find ({propB: 'x', propA: 'z'})
Следующие элементы не могут использовать данный индекс:
- db.collection.find ({propB: 'x'})
- db.collection.find ({propC: 'y'})
- db.collection.find ({propB: 'x', propC: 'y'})
Похожие вопросы
Связанные вопросы
Новые вопросы
mongodb
MongoDB - это масштабируемая, высокопроизводительная база данных NoSQL с открытым исходным кодом, ориентированная на документы. Он поддерживает большое количество языков и платформ разработки приложений. Вопросы по администрированию сервера можно задать на https://dba.stackexchange.com.