Задать вопрос
losaped
@losaped
Пьяный самурай

Как правильно построить индекс для mongodb?

Добрый день! Подскажите в чем может быть проблема и как сделать правильно?
есть коллекция documents . По мере обработки документов из этой коллекции к документу добавляется поле is_processed: true
создал sparse индекс на это поле. Сначала все работало прекрасно:
db.documents.find({is_processed: {$exists: false}}).limit(200)
позже, при запуске обработки заметил, что записи вытаскиваются очень долго (раньше по 200 записей за пару секунд, а теперь даже не дожидаюсь окончания).
Убил индекс, создал по новой, не работает. В чем может быть дело?

mongo работает в докере, количество документов около 4,500 000
  • Вопрос задан
  • 296 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 1
onqu
@onqu
weasy
При использовании в выборке sparse index на "неоднородных" документах нужно использовать hint, плюс не нужно добавлять $exists. И конечно же, не нужно забывать, что индекс с 2мя значениями (1:0 / true:false и тд) всегда малоэффективен.

Документы неоднородны, когда отсутствуют какие-то свойства, которые есть у других документов, и по этим свойствам строится индекс.

db.documents.createIndex( { is_processed: 1 } , { sparse: true } )


db.documents.find({is_processed: 1}).hint({is_processed: 1}).limit(200)

или
db.documents.find().sort({is_processed: 1}).hint({is_processed: 1}).limit(200)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы