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

MongoDB :Indekser rækkefølge og forespørgselsrækkefølge skal matche?

Rækkefølgen af ​​betingelserne i din forespørgsel påvirker ikke, om den kan bruge et indeks eller ej.

f.eks. typisk dokumentstruktur:

{
    "FieldA" : "A",
    "FieldB" : "B"
}

Hvis du har et sammensat indeks på A og B :

db.MyCollection.ensureIndex({FieldA : 1, FieldB : 1})

Så vil begge følgende forespørgsler være i stand til at bruge det indeks:

db.MyCollection.find({FieldA : "A", FieldB : "B"})
db.MyCollection.find({FieldB : "B", FieldA : "A"})

Så rækkefølgen af ​​betingelserne i forespørgslen forhindrer ikke indekset i at blive brugt - hvilket jeg tror er det spørgsmål, du stiller.

Du kan nemt teste dette ved at prøve de 2 forespørgsler i shellen og tilføje .explain() efter fundet. Jeg gjorde det bare for at bekræfte, og de viste begge, at det sammensatte indeks blev brugt.

men hvis du kører følgende forespørgsel, vil dette IKKE bruge indekset, da felt A ikke forespørges på:

db.MyCollection.find({FieldB : "B"})

Så det er rækkefølgen af ​​felterne i indekset, der definerer, om det kan bruges af en forespørgsel og ikke rækkefølgen af ​​felterne i selve forespørgslen (det var det, Lucas henviste til).



  1. docker-compose + django + redis - Fejl 111 ved forbindelse til 127.0.0.1:6379. Tilslutning afvist

  2. Mongodb, samlet forespørgsel med $lookup

  3. Selleri med flere django-steder

  4. MongoDB:find og findOne med indlejret array-filtrering