Вопрос: Каковы накладные расходы обеспеченияIndex ({field: 1}), когда индекс уже существует?


Я бы всегда хотел, чтобы мои коллекции были проиндексированы, и я добавляю и отбрасываю их на регулярной основе.

Предполагая, что я создаю новое соединение с БД с каждым веб-запросом, было бы нормально выполнять несколько операторов db.collection.ensureIndex ({field: true}) каждый раз, когда я подключаюсь?


4


источник


Ответы:


Насколько я понимаю, MongoDB просто попросит систему Collection посмотреть, существует ли индекс до его создания ...

http://www.mongodb.org/display/DOCS/Indexes#Indexes-AdditionalNotesonIndexes

> db.system.indexes.find();

Вы можете запустить getIndexes (), чтобы увидеть индексы коллекции

> db.things.getIndexes();

Итак, вы просто добавляете один запрос; он не перестроил бы его или не сделал бы ничего еще неочевидного.

Тем не менее, Я не думаю, что это будет особенно хорошая идея , Это добавит ненужные накладные расходы, и хуже может заблокировать вашу базу данных по мере создания индекса ... поскольку по умолчанию создание индекса блокирует вашу базу данных (если только вы не запускаете ее в фоновом режиме) следующим образом:

> db.things.ensureIndex({x:1}, {background:true});

Однако заметьте ...

... в режиме фонового режима используется   постепенный подход к построению   индекс, который медленнее, чем значение по умолчанию   режим переднего плана: время для создания   индекс будет больше.

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


8