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

Enkel MongoDB-forespørgsel meget langsom, selvom indekset er indstillet

Du har ikke noget indeks, som mongo automatisk vil bruge til det, så den laver en fuld tabelscanning.

Som nævnt i dokumenterne

Hvorfor

Hvis du har et indeks på a,b - og du søger på a alene - et indeks vil automatisk blive brugt. Dette er fordi det er starten på indekset (hvilket er hurtigt at gøre), db kan bare ignorere resten af ​​indeksværdien.

Et indeks på a,b er ineffektivt når du søger efter b alene, simpelthen fordi det ikke giver mulighed for at bruge indekssøgningen med "starter med denne faste streng".

Så enten:

  • Inkluder _reference_1_id i forespørgslen (sandsynligvis irrelevant)
  • ELLER tilføj et indeks på _reference_2_id (hvis du ofte spørger efter feltet)
  • ELLER brug et tip

Tip

Sandsynligvis din billigste løsning lige nu.

Tilføj et forespørgselstip for at tvinge din _reference_1_id_1__reference_2_id_1_id_1 indeks. Hvilket sandsynligvis vil være meget hurtigere end en fuld tabelscanning, men stadig meget langsommere end et indeks, der starter med det felt, du bruger i forespørgslen.

dvs.

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


  1. MongoDB logfil vækst

  2. Spring data mongodb - integration af aggregeringsramme

  3. Sletning af store Javascript-objekter, når processen løber tør for hukommelse

  4. Hvordan fortæller du Mongo om at sortere en samling, før du begrænser resultaterne?