MongoDB - Уникальный индекс против составного индекса - PullRequest
7 голосов
/ 07 марта 2012

Предположим гипотетический документ с 3 полями:

  1. _id: ObjectId
  2. emailAddress: string
  3. account: string

Теперь, учитывая запрос к учетной записи emailAddress AND, какой из следующих двух индексов будет работать лучше:

  1. Уникальный индекс только для emailAddress (предположим, что это уникальное поле)
  2. Составной индексна адрес электронной почты и адрес электронной почты

Ответы [ 2 ]

15 голосов
/ 07 марта 2012

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

С точки зрения использования памяти (что очень важно для баз данных, таких как MongoDB), индекс электронной почты также намного меньше.

TL; DR: использовать индекс для электронной почтыадрес один.

3 голосов
/ 09 августа 2012

Когда дело доходит до индексов, цель состоит в том, чтобы создать отдельный индекс с максимально возможной мощностью (или «селективностью»). Попробуйте написать запросы, которые используют 1 (составной) индекс на запрос. Уникальные индексы имеют максимальную мощность. Составление уникальных индексов с менее селективными полями не может в дальнейшем увеличить этот максимум. Добавление большего количества индексов только замедляет запросы find (), update () и remove (). Так что будь "худой и злой".

Однако , если вы используете sort () в поле учетной записи, когда выполняете поиск () в поле электронной почты, вам следует использовать составной индекс:

это обычно для запроса по нескольким ключам и сортировки Результаты. Для этих ситуаций составные индексы являются лучшими. http://www.mongodb.org/display/DOCS/Indexing+Advice+and+FAQ

Так что подумайте! Если вам нужно отсортировать данные по другому полю, то обычно вам нужен составной индекс.

...