когда индексировать по нескольким ключам в mongodb - PullRequest
23 голосов
/ 10 июня 2010

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

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

Редактировать: я нашел эту статью на сайте mongodb очень полезной:

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

Ответы [ 2 ]

42 голосов
/ 11 июня 2010

Индекс на 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 : ...})

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

0 голосов
/ 10 июня 2010

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

...