Какой индекс мне следует использовать для этой отдельной команды в mongodb - PullRequest
2 голосов
/ 09 марта 2012

Я хотел бы получить как можно быстрее количество всех различных возможных значений поля ch (поле h вложенного документа, включенного в поле c записей в коллекции), которые удовлетворяют данному запросу: { p: [a_int], r: [a_bool]}

Моим первым делом было индексировать: {p: 1, r: 1, "c.h": 1}

Это правильно? Будет ли он правильно использовать?

Я использую Монго 2.0.1

РЕДАКТИРОВАТЬ: Я нашел на jira билет , что вы можете получить статистику запроса. Однако он работает только при использовании на наборах реплик (а не при запуске из монго в шардинге). Похоже, что для правильного использования запроса используется хотя бы индекс {p: 1, "c.h": 1}, поэтому я попытаюсь использовать полный индекс.

EDIT2: полный индекс работает лучше, чем ожидалось.

1 Ответ

1 голос
/ 09 марта 2012

Если объяснение () не работает для вашего индивидуума в изолированной среде, вы можете использовать подход "грубой силы".Используйте подсказку (), чтобы явно указать индекс, который вы хотите проверить, и затем сравнить результаты:

http://www.mongodb.org/display/DOCS/Optimization#Optimization-Hint

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

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

...