документе user содержаться поля типо name, city, email, age... и.т.д.
И допустим, что пользователь может запрашивать users с различными фильтрами поиска.
Вопрос - какие под это всё дело строить индексы?
Насколько я знаю, при построении составного индекса порядок имеет значение. А так же имеет значение сортировка.
Это значит, что индекс {name: -1} != {name: 1}. А так же индекс {name: 1, city: 1} != {city: 1, name: 1}. А ведь пользователь может запрашивать users с абсолютно разными комбинациями доступных фильтров, и это естественно.
И я вот представляю, какое кол-во комбинаций потенциально возможных индексов может быть для одного простого, по сути, тривиального запроса с фильтром просто по 4 полям, и понимаю, что тут что-то не так.
Как быть?
на самом деле достаточно по одному индексу на поле, а монга сама выберет лучший и по нему отфильтрует. Остальное уже чтением с диска. Чтобы это быстро работало закидываете побольше оперативы, чтобы все индексы помещались
То есть достаточно построить просто индекс {name: 1, city: 1, age: 1, email: 1}, и любой запрос, использующий эти 4 поля в любых комбинациях, будет использовать эффективно этот индекс? И если какой-то пользователь запросит {age: 18, name: "Иван"}, монга использует этот индекс, и переберет у себя в поиске только документы с точно такими значениями полей?
нет, 4 отдельных индекса
Обсуждают сегодня