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 по этому полю, и он все еще будет использовать индекс для этапа сортировки.

Но если ваш запрос может измениться с использованием меньшего или большего количества полей, возможно, это не лучший вариант. Подробнее об этом читайте здесь, особенно на примерах

https://docs.mongodb.com/manual/core/index-compound/

Другие вопросы по тегам