Обзор
MongoDB предоставляет несколько типов индексов, каждый из которых оптимизирован для конкретных паттернов запросов и случаев использования.
Типы индексов
- Одиночное поле (Single Field) – индексирует одно поле; идеален для простых запросов на равенство или диапазон по конкретному полю
- Составной (Compound) – индексирует несколько полей вместе; полезен, когда запросы фильтруют или сортируют более чем по одному полю
- Многоключевой (Multikey) – автоматически создаётся при индексировании поля-массива; генерирует отдельную запись индекса для каждого элемента массива
- Текстовый (Text) – включает полнотекстовый поиск по строковому содержимому; поддерживает стемминг и фильтрацию стоп-слов
- Геопространственный (Geospatial) (
2d и 2dsphere) – оптимизирован для запросов на основе местоположения; 2dsphere поддерживает сферическую геометрию
- Хешированный (Hashed) – индексирует хеш значения поля; в основном используется для хешированного шардинга с целью равномерного распределения данных
- TTL (Time-To-Live) – автоматически удаляет документы по истечении заданного времени; идеален для хранения сессий или логов
- Wildcard – индексирует все поля или поля, соответствующие паттерну; полезен для динамических схем, где запрашиваемые поля заранее неизвестны
- Уникальный (Unique) – гарантирует уникальность значений индексируемого поля среди всех документов; аналог ограничения уникальности в реляционных базах данных
Ключевой вывод
Выбор правильного типа индекса зависит от твоих паттернов запросов и структуры данных. Например:
- Используй составные индексы для эффективной поддержки запросов по нескольким полям
- Используй TTL-индексы для автоматического удаления устаревших данных без ручной очистки
- Используй текстовые индексы при реализации поиска по строковым полям
Правильное индексирование критично для производительности запросов, однако избыточное количество индексов может увеличить нагрузку на запись и потребление памяти — поэтому индексы стоит добавлять обдуманно.