Учебники

MongoDB – покрытые запросы

В этой главе мы узнаем о покрытых запросах.

Что такое закрытый запрос?

Согласно официальной документации MongoDB, покрытый запрос – это запрос, в котором:

  • Все поля в запросе являются частью индекса.
  • Все поля, возвращаемые в запросе, имеют одинаковый индекс.

Поскольку все поля, присутствующие в запросе, являются частью индекса, MongoDB сопоставляет условия запроса и возвращает результат, используя тот же индекс, фактически не заглядывая в документы. Поскольку индексы присутствуют в оперативной памяти, выборка данных из индексов происходит намного быстрее, чем выборка данных путем сканирования документов.

Использование покрытых запросов

Чтобы проверить покрытые запросы, рассмотрите следующий документ в коллекции пользователей

{
   "_id": ObjectId("53402597d852426020000002"),
   "contact": "987654321",
   "dob": "01-01-1991",
   "gender": "M",
   "name": "Tom Benzamin",
   "user_name": "tombenzamin"
}

Сначала мы создадим составной индекс для коллекции пользователей по полам пола и имени пользователя, используя следующий запрос –

>db.users.ensureIndex({gender:1,user_name:1})

Теперь этот индекс будет охватывать следующий запрос –

>db.users.find({gender:"M"},{user_name:1,_id:0})

То есть, для вышеупомянутого запроса MongoDB не будет искать документы базы данных. Вместо этого он будет извлекать необходимые данные из проиндексированных данных, что очень быстро.

Поскольку наш индекс не включает поле _id , мы явно исключили его из набора результатов нашего запроса, так как MongoDB по умолчанию возвращает поле _id в каждом запросе. Таким образом, следующий запрос не был бы покрыт внутри индекса, созданного выше –

>db.users.find({gender:"M"},{user_name:1})

И наконец, помните, что индекс не может покрыть запрос, если –