MongoDB: индекс с двумя полями и индекс поля документа - PullRequest
6 голосов
/ 19 мая 2011

Мне нужно проиндексировать коллекцию по двум полям (уникальный индекс), скажем, field1 и field2. Какой подход лучше с точки зрения производительности:

  1. Создать обычный двухколонный индекс

    -или -

  2. Объединить эти два поля в одном поле документа {field1: value, field2: value2} и проиндексировать это поле?

Примечание: я всегда буду запрашивать эти два поля вместе.

Ответы [ 2 ]

3 голосов
/ 19 мая 2011

Вы можете хранить отдельные столбцы и создать один индекс, который повысит производительность при одновременном запросе обоих полей.

db.things.ensureIndex({field1:1, field2:1});

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

Наличие столбцов в одном столбце обеспечиваетпроизводительность не увеличивается, поскольку вы должны индексировать их одинаково:

db.things.ensureIndex({fields.field1:1, fields.field2:1});

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

Или вы можете проиндексировать весь документ

db.things.ensureIndex({fields: 1});

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

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

1 голос
/ 19 мая 2011

Я бы создал составной индекс по обоим полям.Это займет меньше места на диске, потому что вам не нужно будет хранить дополнительное комбинированное поле, и даст вам бонус дополнительного индекса над первым полем, то есть индекс более { a:1, b:1 } также индекс более { a:1 }.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...