Я заметил, что MongoDB не будет использовать индексы при запросе на отдельное значение в поле. Я буду использовать его на некоторых полях, но не буду на других.MongoDB не использует индексы для некоторых полей при выполнении отличных
Вот пример:
db.product.createIndex({"_indexed.preventieve_mondzorg-max_bedrag_p_jr": 1});
db.runCommand({distinct: "product", key:"_indexed.preventieve_mondzorg-max_bedrag_p_jr"});
Этот запрос не будет использовать индекс, который построен на этом поле и будет идти для полного сканирования коллекции. Это то, что она производит:
{
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 50,
"numIndexesAfter" : 50,
"note" : "all indexes already exist",
"ok" : 1
}
{
"values" : [
"€ 250,- | 75%",
"Geen dekking",
"...",
],
"stats" : {
"n" : 33660,
"nscanned" : 0,
"nscannedObjects" : 33660,
"timems" : 12531,
"planSummary" : "COLLSCAN"
},
"ok" : 1
}
С другой стороны
db.product.createIndex({"free_choice.value": 1});
db.runCommand({distinct: "product", key:"free_choice.value"});
Будет ли индекс:
{
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 50,
"numIndexesAfter" : 50,
"note" : "all indexes already exist",
"ok" : 1
}
{
"values" : [
"gedeeltelijk",
"geen",
"ja"
],
"stats" : {
"n" : 4,
"nscanned" : 4,
"nscannedObjects" : 4,
"timems" : 2,
"planSummary" : "DISTINCT { free_choice.value: 1.0 }"
},
"ok" : 1
}
Итак ... что может быть разница между этими двумя областями?
Это ошибка, или я делаю что-то неправильно?
Я бегу MongoDB 3.0.6 в коробке Бродячей с Ubuntu 14.04.3 LTS