sql >> Database teknologi >  >> NoSQL >> MongoDB

Hvordan MongoDB vælger kandidatplaner

Hvis en forespørgsel kan tilfredsstilles af flere indekser defineret i samlingen, vil MongoDB teste alle relevante indekser parallelt. Det første indeks, der kan returnere 101 resultater, vil blive valgt af forespørgselsplanlæggeren. Der er andre facetter til indeksudvælgelse, men generelt er dette sandt i henhold til Forespørgselsoptimering dokumentation.

Denne indeksvalgsmetode kan vælge et suboptimalt indeks. Dette skyldes, at du efter MongoDB's synspunkt har flere indekser, der beskriver det samme. For at afbøde det suboptimale indeksvalg, du observerede, kan du gøre:

  1. Fjern alle andre indekser, som du opdager er suboptimale.

    Dette er for at sikre, at forespørgselsplanlæggeren ikke har andet valg end at vælge indekser, som du har skræddersyet til din forespørgsel.

  2. Brug hint() metode

    hint() giver dig mulighed for eksplicit at fortælle MongoDB at bruge det foreskrevne indeks til forespørgslen. For eksempel:

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

    Se venligst https://docs.mongodb.com/v2. 6/reference/operatør/meta/hint/ for mere information om hint() .

En anden nuance i din forespørgsel er, at den indeholder en $or operatør. I dette tilfælde hver term i $or udtryk skal have et indeks tilknyttet , ellers vil MongoDB udføre en samlingsscanning (BasicCursor i MongoDB 2.6 termer). Dette er forklaret i flere detaljer på https://docs .mongodb.com/v2.6/reference/operator/query/or/#behaviors




  1. Opdater med udtryk i stedet for værdi

  2. Sådan indstilles featureCompatibilityVersion i MongoDB

  3. Hvorfor nye dokumenter i mongo har et objekt og ikke et ObjectId?

  4. Tæl baseret på tilstand og divider med # poster for tidsinterval