MongoDB и индексы: как ускорить запросы и не сойти с ума

Разбираемся, как индексы в MongoDB превращают черепашьи запросы в реактивные — с юмором и без боли.
Если ваш MongoDB-запрос выполняется дольше, чем заваривается утренний кофе, — пора поговорить об индексах. Без них база данных сканирует каждую коллекцию, как библиотекарь в поисках книги по памяти: долго, мучительно и с вероятностью ошибки.
Индексы в MongoDB — это как оглавление в толстой книге. С ними база находит данные мгновенно, вместо того чтобы листать страницу за страницей. Но тут есть подвох: неправильный индекс может замедлить запись, как если бы вы добавляли новую главу в книгу и заодно переписывали всё оглавление.
Какие индексы стоит знать:
- Одиночный индекс — базовый, для одного поля. Проще некуда, но работает.
- Составной индекс — для нескольких полей сразу. Тут порядок полей критичен: сначала поле с высокой селективностью, иначе индекс бесполезен.
- Текстовый индекс — для полнотекстового поиска. Спасает, когда нужно найти "тот самый документ" по ключевым словам.
- Геопространственный индекс — для всего, что связано с координатами. Без него приложение с картами будет тормозить как навигатор в 2005 году.
Главный секрет оптимизации — используйте explain(). Этот метод покажет, как именно MongoDB выполняет запрос: сканирует коллекцию (плохо) или использует индекс (хорошо). А ещё не забывайте про hint(), если планировщик запросов вдруг решил, что полный перебор — это норм.
Комментарий студии METABYTE: Индексы — мощный инструмент, но помните: с большой силой приходит большая ответственность (и увеличенный размер базы). Мы в METABYTE помогаем настроить MongoDB так, чтобы запросы летали, а не ползали — и без лишних головных болей.