С MongoDB, какие поля нужно выбрать для построения индексов? - PullRequest
2 голосов
/ 01 февраля 2012

Если есть запрос, который фильтрует по полям a и b, а затем упорядочивает по c, нужно ли мне создавать отдельные индексы для a, b и c, или я должен фактически составлять составной индекс (a, b, с)? А также, должна ли последовательность в запросе соответствовать последовательности в индексе? то есть, если последовательность фильтра в запросе - это фильтр b, фильтр c, а затем порядок по a, то лучше ли иметь составной индекс (b, c, a)?

Ответы [ 2 ]

2 голосов
/ 01 февраля 2012

Поскольку MongoDB в настоящее время использует только один индекс для запроса, вам потребуется составной индекс.

Порядок индексных параметров имеет значение, хотя не обязательно так, как вы упоминаете в вопросе.

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

Таким образом, индекс должен быть (a, b, c) или (b, a, c). Какой из них должен быть, зависит от селективности - другими словами, в каком поле удаляются элементы, которые не совпадают быстрее?

Если существует 10 000 вероятных значений для b и только два вероятных значения для a, тогда индекс должен быть (b, a, c). И наоборот, если есть много других возможных значений для a, то, вероятно, это должно быть (a, b, c). Если эти два поля примерно одинаковы по своей способности исключать документы из запроса, это не имеет большого значения.

1 голос
/ 01 февраля 2012

Все эти и другие ответы даны в документах .См. Разделы о составных индексах.

Порядок параметров запроса не имеет значения.

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