Подтвердить что ты не робот

Когда индексировать по нескольким клавишам в mongodb

Скажем, у меня есть документ с полями: price и: qty. Я иногда хочу найти все документы, соответствующие данному: price AND: qty, а в других случаях это будет либо: цена сама по себе, либо: qty сама по себе.

Я уже проиндексировал ключи: price и: qty, но мне также нужно создать составной индекс на обоих вместе или достаточно одиночных ключевых индексов?

Изменить: я нашел эту статью на сайте mongodb очень полезной:

http://www.mongodb.org/display/DOCS/Indexing+Advice+and+FAQ

4b9b3361

Ответ 1

Индекс на price помогает с запросами на price. Индекс на qty помогает с запросами на qty. Индекс на price и qty помогает с запросами в price И запросах на price и qty. Таким образом, это похоже на получение двух индексов по цене одного. Тем не менее, это не поможет для запросов на qty.

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

Как правило, если вы выполняете запрос на x, y и z, вы должны иметь индекс, например {x:1, y:1, z:1}. Этот индекс быстро выполнит следующие запросы:

db.foo.find({x : ..., y : ..., z : ...})
db.foo.find({x : ..., y : ...})
db.foo.find({x : ...})

Он не будет быстро выполнять эти запросы:

db.foo.find({y : ..., z : ...})
db.foo.find({y : ...})

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

Ответ 2

если вам нужно: цена сама по себе или: qty сама по себе, тогда составной индекс не будет работать.