2014-12-04 1 views
1

При изменении кода, быстрый способ, который говорит мне, если индексы по-прежнему свойственны find() утверждений (nodejs)Как я могу объяснить() upsert в MongoDB, чтобы узнать, используются ли индексы?

 collection.find(query).explain(function(err, explaination) { 
      console.log('MongoDebug: ' + explaination.cursor); 
     }); 

Если курсор типа BtreeCursor, используются индексы.

Как это проверить при использовании insert() с upsert: true?

ответ

4

explain() - это функция на курсоре и недоступна для вставок. Там также есть модификатор запроса , но он по-прежнему является запросом модификатором.

Однако есть большая нагрузка на работу, указанная как explain 2.0, одна из подзадач должна предоставить explain() for updates - SERVER-14101. Это указано как исправлено в версии 2.7.7.

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

Вы можете использовать integrated profiler и db.currentOp() для анализа производительности операций без запроса на данный момент, но информация ограничена. Попробуйте простой find().explain() для ручной оптимизации, используемые индексы должны быть одинаковыми.

+1

Спасибо, это ясный ответ. Я сразу приму это. – Redsandro