2017-02-02 3 views
0

Я хотел бы понять, какой из нижеперечисленных запросов будет быстрее, делая обновления, в mongo db? Я хочу обновить несколько тысяч записей на одном участке.Mongo DB update query performance

  1. Накопление объектов идентификаторов этих записей и их запуск с использованием $ in или с использованием массового обновления?

  2. Использование одного или двух полей в коллекции, которые являются общими для нескольких тысяч записей - сродни «где» в sql и запускают обновление с использованием этих полей. Эти поля могут индексироваться или не индексироваться.

Я знаю, что во втором случае запрос будет намного меньше, так как каждый «_id» (oid) не накапливается. Имеет ли накопление _ids и использование этих для обновления документов какие-либо практические преимущества?

ответ

1

ли накопление _ids и используя те обновить документы предлагают какие-либо практические преимущества в производительности?

Да потому, что MongoDB будет, конечно, использовать индекс _id (idhack).

Во втором методе - как вы заметили - вы не можете определить, будет ли индекс использоваться для определенного поля.

Так что ответ будет: это зависит.

Если ваша коллекция насчитывает миллион документов или более и/или количество полей поиска достаточно велико, вы должны предпочесть первый метод поиска. Особенно, если размер списка идентификаторов невелик и/или значения id смежны.

Если ваша коллекция довольно маленькая, и вы можете терпеть полное сканирование, вы можете предпочесть второй подход.

В любом случае вам следует дать показания обоим методам, используя explain().

+0

Спасибо за ваш ответ Ori. Во втором сценарии, если поля поиска индексируются, будет ли это лучше, чем накапливать _ids и использовать его. – JayKrish

 Смежные вопросы

  • Нет связанных вопросов^_^