Как мне индексировать "или" в MongoDB? - PullRequest
2 голосов
/ 22 октября 2011

Допустим, у меня есть много документов, похожих на это ...

{
    name: 'alex',
    city: 'LA',
    about: 'designer',
}

db.people.find({'name':'alex', $or: [{'city':'LA'}, {'about':'designer'}] });

Если я хочу запросить это, как мне его проиндексировать?Нужно ли мне 2 индекса каждый раз, когда у меня есть "или"?

1 Ответ

3 голосов
/ 22 октября 2011

Первым словом в индексировании всегда является официальная документация по индексу Монго .

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

db.people.ensureIndex({name:1, city:1});
db.people.ensureIndex({name:1, about:1});

Однако, прежде чем остановиться на каком-либо варианте, я бы использовал Mongo объясните метод , чтобы определить, какую выгоду дает вам каждый индекс по запросу без индекса (тестирование на наборе данных, таком большом, как ожидаемый производственный запрос).Я бы уделил особое внимание свойствам "nscanned" и "nscannedObjects" с каждой комбинацией индекса, а также проверил бы, что нужный индекс используется с использованием "indexOnly" и "isMultiKey".

AsИ последнее замечание: чрезмерная индексация может также вызвать проблемы с производительностью - если бы они этого не сделали, нам не пришлось бы обеспечивать индексы.Убедитесь, что вам нужно увеличение скорости чтения индексов больше, чем потери скорости записи от этих индексов.

...