2015-09-24 1 views
0

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.

+2

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"}}} –

+0

Merci. L'ajout de l'index composé a résolu le problème. – user3723491

Répondre

0

vous devez créer l'index sur les champs imbriqués comme celui-ci

db.index.createIndex ({ "id.pid.f1": 1, "id.pid.f2": 1})

+0

Merci. L'ajout de l'index composé a résolu le problème. – user3723491