Учебники

MongoDB — Анализ запросов

Анализ запросов является очень важным аспектом измерения эффективности базы данных и дизайна индексации. Мы узнаем о часто используемых запросах $ объяснение и $ подсказка .

Используя $ объяснение

Оператор $ объяснение предоставляет информацию о запросе, индексах, используемых в запросе, и другую статистику. Это очень полезно при анализе того, насколько хорошо оптимизированы ваши индексы.

В предыдущей главе мы уже создали индекс для коллекции пользователей по полам пола и имени пользователя, используя следующий запрос:

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

Теперь мы будем использовать $ объяснение по следующему запросу —

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

Приведенный выше запрос объяснения () возвращает следующий проанализированный результат —

{
   "cursor" : "BtreeCursor gender_1_user_name_1",
   "isMultiKey" : false,
   "n" : 1,
   "nscannedObjects" : 0,
   "nscanned" : 1,
   "nscannedObjectsAllPlans" : 0,
   "nscannedAllPlans" : 1,
   "scanAndOrder" : false,
   "indexOnly" : true,
   "nYields" : 0,
   "nChunkSkips" : 0,
   "millis" : 0,
   "indexBounds" : {
      "gender" : [
         [
            "M",
            "M"
         ]
      ],
      "user_name" : [
         [
            {
               "$minElement" : 1
            },
            {
               "$maxElement" : 1
            }
         ]
      ]
   }
}

Теперь мы рассмотрим поля в этом наборе результатов —

  • Истинное значение indexOnly указывает, что этот запрос использовал индексацию.

  • Поле курсора указывает тип используемого курсора. Тип BTreeCursor указывает, что индекс использовался, а также дает имя используемого индекса. BasicCursor указывает, что полное сканирование было выполнено без использования каких-либо индексов.

  • n указывает количество возвращенных документов.

  • nscannedObjects указывает общее количество отсканированных документов.

  • nscanned указывает общее количество сканированных документов или записей индекса.

Истинное значение indexOnly указывает, что этот запрос использовал индексацию.

Поле курсора указывает тип используемого курсора. Тип BTreeCursor указывает, что индекс использовался, а также дает имя используемого индекса. BasicCursor указывает, что полное сканирование было выполнено без использования каких-либо индексов.

n указывает количество возвращенных документов.

nscannedObjects указывает общее количество отсканированных документов.

nscanned указывает общее количество сканированных документов или записей индекса.

Использование $ hint

Оператор $ hint заставляет оптимизатор запросов использовать указанный индекс для выполнения запроса. Это особенно полезно, когда вы хотите проверить производительность запроса с разными индексами. Например, следующий запрос указывает индекс для полей пол и имя_пользователя, которые будут использоваться для этого запроса —

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

Чтобы проанализировать вышеуказанный запрос с помощью $ объясните —