Приложения и их пользователи ищут производительность запросов в течение нескольких сотен миллисекунд (не 10 минут) для коллекции с несколькими миллионами документов. Индексы используются для ускорения выполнения этих запросов.
Можно выполнить быстрый запрос диапазона, как описано выше, создав индекс из одного поля в поле даты фильтра запросов поиска. Индексы хранят значение поля ключа индекса и адрес документа в коллекции - это небольшой объем данных. Для типичной коллекции, запроса и индекса данные коллекции и индекс должны быть доступны (или помещаться) в памяти (называемой рабочим набором) для эффективного использования. При выполнении запроса доступ к индексу осуществляется на основе критериев фильтра, а затем соответствующих документов.
Невозможно ускорить выполнение запроса без использования индекса с миллионами документов (обратите внимание, что он может не иметь значения с парой тысяч документов). Это можно продемонстрировать практически в среде dev с набором образцов из пары миллионов документов, индексом в поле фильтра запросов и тестовым прогоном.
Инструмент, который будет использоваться для выполнение этого теста создает план запроса с использованием объяснения . метод объяснения имеет режим «executeStats», который предоставляет такие данные, как используемый индекс (если есть), время выполнения запроса, ключи индекса, к которым обращались, количество возвращенных документов, различные этапы запроса исполнение, et c. Этапы плана покажут, будет ли индекс использоваться запросом. Как правило, запрос, выполняемый с использованием индекса, покажет индексированное сканирование (IXSCAN), а если индекс не используется, это будет сканирование коллекции (COLLSCAN).
Созданный индекс также можно использовать с другими запросами, если применимо, а также сортировки. Кроме того, индекс может быть составным индексом (с использованием нескольких полей) и может использоваться с другими запросами.
Также см. FAQ: Indexes для получения дополнительной информации. Поскольку у вас уже есть большая коллекция, см. Построения индексов для заполненных коллекций для ознакомления с указаниями.
Команда db.collection.stats () полезна для определения размера коллекции и индекса.
В дополнение к индексации, проекция только обязательных полей также может повлиять на производительность вашего запроса.