Преимущество уникального индекса в MongoDB

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

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

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

2 ответа

Решение

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

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

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

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

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

Уникальный индекс или уникальное ограничение работает точно так же, как и в СУБД. Уникальность проверяется во время вставки, но не имеет ничего общего с производительностью чтения (зачем это нужно?). Почему вы задаете этот вопрос? Есть ли рациональные причины этого вопроса? Делали ли вы какие-либо тесты производительности? Есть ли у вас проблемы в реальном мире? Используйте уникальный индекс, когда вам нужно одно очко. Каждое дальнейшее обсуждение, вероятно, бессмысленно.

Другие вопросы по тегам