Вашият explain() резултатите предполагат, че:
-
Има 10962 обекта, които имат
key.a : 456213154. Вашатаdb.collection.find({"key.a": 456213154})заявката използва индекса наkey.aи върна 10962 обекта. -
Във вашата колекция има 0 обекта, които имат
key.a : 456213154и иматkey.b : { $exists : true }.db.collection.find({"key": {"a": 456213154, "b": {"$exists":true}}})заявката използва вашия индекс на ключ.
Вижте n стойност за всяка заявка - това е върнатото число; и cursor стойност - това е BtreeCursor ако се използва индекс. В този случай би имало смисъл защо първата заявка отнема много повече време, защото има значително повече обекти за връщане.
Сигурни ли сте, че документите с key.a : 456213154 стойностите също имат key.b стойности?
Редактиране:
Заявката с $exists param е грешен синтаксис за проверка на съществуването във вградени документи.
Опитайте db.collection.find({ "key.a" : 456213154, "key.b" : { "$exists" : true } }) .