Вопрос по mongodb, unique-index, mongodb-indexes – Преимущество уникального индекса в MongoDB

10

Я пытался искать в документации Mongo, но не могу найти каких-либо подробностей о том, будут ли запросы по уникальным индексам выполняться быстрее, чем запросы по неуникальным индексам (с учетом тех же данных)

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

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

Вы получили окончательный ответ на это? Я делаю несколько массовых рассылок (более 3 000 000 операций), и использование индекса, отличного от _id, было несравнимо медленнее. Много порядков. Я использовал 2d (неуникальный, но мог бы быть) индекс геолокации, чтобы основывать обновления. Я собираюсь снова попытаться сделать индекс геолокации уникальным и посмотреть, получу ли я улучшение производительности. ephemer

Ваш Ответ

2   ответа
15

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

Индексы MongoDB реализованы как btrees, поэтому для них не имело бы никакого логического смысла выполнять их по-другому, независимо от того, является ли индекс уникальным или нет.

Спасибо, хотя одно отличие, которое я могу вспомнить при сканировании уникального индекса btree, заключается в том, что вы можете прекратить сканирование после того, как будет найдено первое совпадение ... так что в этом случае это может иметь "логический смысл" выполнять (немного) быстрее? Я также отмечаю, что когда вы говорите «возвращает один документ» Вы подразумеваете, что в запросе указан предел (1), и в этом случае не будет никакой разницы с использованием этой логики. Zaid Masud
0

л 500 000 записей (случайно сгенерированных строк) в коллекции и попытался выполнить пару запросов с помощью оператора объяснения ().db.test.find() with no indexes

Затем я обеспечил уникальный индекс и попробовал еще несколько запросов:db.test.find() with unique index

Как видите, после добавления индекса потребление времени уменьшилось с ~ 276мс до 0мс! Таким образом, кажется, что даже если индекс уникален, он влияет (положительно) на запросы поиска.

Я искал сравнение между уникальным и неуникальным индексом. Не сравнение между уникальным индексом и без индекса. Zaid Masud
О, я вижу. Это было недоразумение с моей стороны :)

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