J'ai une collection qui contient environ 42M documents. J'ai 2 indices sur cette collection, comme suit:Mongodb - index non utilisé
{
"0" : {
"v" : 1,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "ns.coll1"
},
"1" : {
"v" : 1,
"unique" : true,
"key" : {
"id" : 1
},
"name" : "id_1",
"ns" : "ns.coll1"
}
}
Et, voici comment le champ id ressemble:
"_id" : ObjectId("55f9b6548aefbce6b2fa2fac"),
"id" : {
"pid" : {
"f1" : "val1",
"f2" : "val2"
}
},
Une simple requête sur cette collection, en utilisant les champs indexés, toujours n'utilise pas l'index.
db.coll1.find({"id.pid.f1":"val1","id.pid.f2":"val2"}).explain();
{
"cursor" : "BasicCursor",
"isMultiKey" : false,
"n" : 1,
"nscannedObjects" : 42635482,
"nscanned" : 42635482,
"nscannedObjectsAllPlans" : 42635482,
"nscannedAllPlans" : 42635482,
"scanAndOrder" : false,
"indexOnly" : false,
"nYields" : 333089,
"nChunkSkips" : 0,
"millis" : 51312,
"filterSet" : false,
"stats" : {
"type" : "COLLSCAN",
"works" : 42635484,
"yields" : 333089,
"unyields" : 333089,
"invalidates" : 0,
"advanced" : 1,
"needTime" : 42635482,
"needFetch" : 0,
"isEOF" : 1,
"docsTested" : 42635482,
"children" : []
}
}
Que manque-t-il ici? Est-ce qu'une table complète analyse la meilleure approche ici, et est-ce la raison pour laquelle elle n'utilise pas l'index? Merci.
Votre index est sur l'objet dans son ensemble, pas les sous-champs. Vous auriez besoin d'un index composé sur id.pid.f1 et id.pid.f2. Alternativement, vous pouvez rechercher {id: {pid: {f1: "val1", f2: "val2"}}} –
Merci. L'ajout de l'index composé a résolu le problème. – user3723491