sql >> Databasteknik >  >> NoSQL >> MongoDB

Enkel MongoDB-fråga mycket långsam även om index är inställt

Du har inget index som mongo automatiskt kommer att använda för det, så det gör en fullständig tabellskanning.

Som nämnts i dokumenten

Varför

Om du har ett index på a,b - och du söker på a ensam - ett index kommer automatiskt att användas. Detta beror på att det är början av indexet (vilket är snabbt att göra), db kan bara ignorera resten av indexvärdet.

Ett index på a,b är ineffektivt när du söker med b ensam helt enkelt för att det inte ger möjlighet att använda indexsökningen med "starts with thisfixedstring".

Så antingen:

  • Inkludera _reference_1_id i frågan (förmodligen irrelevant)
  • ELLER lägg till ett index på _reference_2_id (om du ofta frågar efter fältet)
  • ELLER använd en ledtråd

Tips

Förmodligen ditt billigaste alternativ just nu.

Lägg till en frågetips för att tvinga fram din _reference_1_id_1__reference_2_id_1_id_1 index. Vilket sannolikt är mycket snabbare än en fullständig tabellsökning, men fortfarande mycket långsammare än ett index som börjar med fältet du använder i frågan.

dvs

db.mycoll
    .find({"_reference_2_id" : ObjectId("jkl7890123456")})
    .hint("_reference_1_id_1__reference_2_id_1_id_1");


  1. Redis koncept:I minnet eller DB?

  2. Mongoose findOneAndUpdate Upsert _id null?

  3. Unikt index i mongoose fungerar inte

  4. hur man använder fylla och aggregera i samma uttalande?