Общее правило для индексов MongoDB - создавать индексы для полей с высокой селективностью.Например, индексирование по уникальному идентификатору является высокоселективным, тогда как индексирование по логическому или перечисляемому полю потенциально очень «низкоселективно».
У меня есть случай использования, когда записи имеют поле «статус» с этимивозможные значения: InProgress, Finished, Claiming, Claimed.
У меня есть логика на моем сервере, работающем в цикле:
- Найти следующую запись "Finished" и установить статус ""Утверждение ".
- Выполнение некоторых операций над записью.
- Установка статуса на" Заявлено ".
В настоящее время у меня нет индекса на" статус ",Когда я выполняю операцию «найти следующее», происходит сканирование коллекции.Так как я делаю "findOne", я предполагаю / надеюсь, что он вернется, как только будет найдено первое совпадение.В будущем мне может потребоваться изменить это значение на «findMany» для обработки в пакетах, а не по одному за раз.
В этом сценарии я чувствую необходимость добавить индекс «Статус», ноЯ в конфликте.С одной стороны, это поле с очень низкой селективностью (только 4 возможных значения).С другой стороны, кажется, что этот индекс был бы более эффективен для такого поведения «получи следующее».
Есть ли у кого-то свое мнение по этому поводу?В другом месте я читал, что еще один метод для такого рода вещей - это использование нескольких коллекций для каждого статуса - кажется ли это лучшим подходом здесь?Есть ли другие варианты, которые я должен рассмотреть?