Насколько полными должны быть индексы MongoDB? - PullRequest
2 голосов
/ 23 сентября 2011

Например, у меня есть документы только с тремя полями: пользователь, дата, статус.Поскольку я выбираю по пользователю и сортирую по дате, у меня есть эти два поля в качестве индекса.Это правильная вещь.Однако, поскольку у каждой даты есть только один статус, я по существу индексирую все.Можно ли не индексировать все поля в запросе?Где вы проводите черту?

Что делает этот вопрос более сложным, так это совершенно противоположный подход к индексам между коллекциями с интенсивным чтением и интенсивным чтением.Если у вас что-то среднее, как вы определяете правильный подход к индексам?

Ответы [ 2 ]

1 голос
/ 24 сентября 2011

Идеальная ситуация - хранить все в одном индексе.Я имею в виду все поля, по которым вы запрашиваете, вы сортируете и получаетеЭто обеспечит максимальную производительность (если индекс умещается в оперативной памяти). Такая ситуация не всегда возможна, поэтому вам придется сделать выбор.

Вот 3 совета, как уменьшить максимальный размер индекса:

У каждого вашего запроса много результатов или только несколько?=> Несколько: вам не нужно индексировать все поля, которые вы извлекаете (только поля запроса и сортировки, потому что мало результатов означает отсутствие доступа к диску).

Часто ли результаты вашего запроса совпадают (т. Е. Ваша работанабор маленький)?=> не индексируйте поле, которое вы извлекаете, потому что результаты кэшируются mongodb.

У вас есть поле запроса более избирательное, чем другое?=> индексировать только более избирательное поле.

1 голос
/ 24 сентября 2011

Можно ли не индексировать все поля в запросе?

Да, но вы хотите избежать этого для часто используемых запросов. Все, что не проиндексировано, будет означать «сканирование таблицы». Это означает доступ к каждому возможному документу индивидуально, что будет медленным.

Где вы рисуете линию?

Также обратите внимание, что если вы сортируете по неиндексированному полю, MongoDB будет «кричать на вас», если вы пытаетесь отсортировать слишком много данных. Таким образом, вы должны иметь представление о том, сколько данных находится «за пределами» индекса.

Если ваш находится где-то посередине, как вы определяете правильный подход, когда дело доходит до индексов?

Мониторинг, приборостроение, эксперименты и опыт.

Здесь нет жесткого и быстрого правила, все будет зависеть от компромиссов. ЦП и ОЗУ, дисковый ввод-вывод, отзывчивость и т. Д.

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