MongoDB: составные индексы на "где"- выберите
У меня есть следующая схема MongoDB:
mandate: {
type: mongo.Schema.Types.ObjectId,
ref: 'Mandate',
required: true
},
observer: {
type: mongo.Schema.Types.ObjectId,
ref: 'Observer',
required: true
},
value: {
type: Number,
required: true
},
observedAt: {
type: Date,
required: true
}
Эта коллекция содержит огромное количество данных.
Я запрашиваю данные следующим образом:предоставьте мне все данные наблюдателя в период с 2015 по 2016 год, где наблюдатель = "a" и мандат = "b"
Существует ли передовой подход для составного индекса по трем полям (наблюдатель, мандат, наблюдаемый)?
На сегодня я делаю это так:
schema.index({
mandate: 1,
observer: 1,
observedAt: -1
});
Это правильный путь?
1 ответ
Если вы всегда будете запрашивать все эти 3 поля, как в вашем примере, тогда да, это хорошо. Кроме того, потому что вы использовали observedAt
в качестве последнего индекса вы также можете sort
по этому полю, и он все еще будет использовать индекс для этапа сортировки.
Но если ваш запрос может измениться с использованием меньшего или большего количества полей, возможно, это не лучший вариант. Подробнее об этом читайте здесь, особенно на примерах