sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur MongoDB väljer kandidatplaner

Om en fråga kan tillfredsställas av flera index definierade i samlingen kommer MongoDB att testa alla tillämpliga index parallellt. Det första indexet som kan returnera 101 resultat kommer att väljas av frågeplaneraren. Det finns andra aspekter av indexval, men i allmänhet är detta sant enligt Frågeoptimering dokumentation.

Denna indexvalsmetod kan välja ett suboptimalt index. Detta beror på att du enligt MongoDBs synvinkel har flera index som beskriver samma sak. För att minska det suboptimala indexvalet du observerade kan du göra:

  1. Ta bort alla andra index som du upptäcker vara suboptimala.

    Detta för att säkerställa att frågeplaneraren inte har något annat val än att välja index som du skräddarsytt för din fråga.

  2. Använd hint() metod

    hint() låter dig uttryckligen tala om för MongoDB att använda det föreskrivna indexet för frågan. Till exempel:

    db.tasks.find(...).hint({project: 1, created_by: 1})
    

    Se https://docs.mongodb.com/v2. 6/reference/operator/meta/hint/ för mer information om hint() .

En annan nyans i din fråga är att den innehåller en $or operatör. I det här fallet, varje term i $or uttryck måste ha ett index kopplat till sig , annars kommer MongoDB att utföra en samlingsskanning (BasicCursor i MongoDB 2.6-termer). Detta förklaras mer detaljerat på https://docs .mongodb.com/v2.6/reference/operator/query/or/#behaviors




  1. 4 sätt att uppdatera ett dokument i MongoDB

  2. En enkel taggningsimplementering med MongoDB

  3. Jobbschemaläggning i MongoDB

  4. $add med några fält som Null returnerar summavärdet som Null