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

Sådan fremskyndes mongo-forespørgsel

Et par ting, du kan gøre her:

Først og fremmest skal du bruge en $in i stedet for en $or.

For det andet kan MongoDB kun brug et indeks til din første kamp, ​​så du bliver nødt til at beslutte (ved at prøve det) hvilken af ​​de to kampe der er bedst. Målet er at have en så hurtig forespørgsel, og færre dokumenter går gennem din pipeline. Til det gør du følgende ting:

Først skal du oprette de tre indekser:

db.element.ensureIndex( { 'versions.branch' : 1 } );
db.element.ensureIndex( { 'doctype' : 1 } );
db.element.ensureIndex( { 'prefix' : 1 } );

Kør derefter følgende tre forespørgsler og læg mærke til felterne "cursor", "n", "nScanned" og "ms":

branch = "nameofbranch"; // guessing here
db.element.find( "versions.branch": branch ).explain();
db.element.find( "doctype" { $in: [ "15281", "15282" .... ] } ).explain();
db.element.find( "prefix": { $ne: "500" } ).explain();

For den sidste forespørgsel vil du bemærke, at "cursor" er "BasicCursor", fordi en $ne-forespørgsel ikke kan bruge indekset.

De to andre vil vise dig forskellige værdier for "ms", "n" og "nScanned". "ms" er den tid, det tog at køre forespørgslen. Hvis dette er omtrent det samme, så se på forskellen mellem "n" og "nScanned" værdierne. Jeg vil forvente og gætte på, at forskellen for "versions.branch"-forespørgslen er 0. For "doctype"-forespørgslen kan det være anderledes. Hvis "ms" ikke er nogenlunde det samme, skal du sætte $match, som var den hurtigste først som $match-klausul i din aggregeringspipeline.

Hvis hastigheden ("ms") begge er den samme, skal du kontrollere "n"-værdierne. Hvis "n" for "præfiks"-forespørgslen er sig "5" og "n" for "versions.branch"-forespørgslen er "500", betyder det, at resultatet af "præfiks"-forespørgslen er bedre, da færre dokumenter returneres. I så fald skal du sætte det som din første $match-klausul samlet. Hvis "versions.branch" er meget mindre, skal du bruge den som første $match-klausul.




  1. Sende en MongoDB-forespørgsel til et andet system:konvertering til JSON og derefter afkodning til BSON? Hvordan gør man det på Go-sproget?

  2. Forbedring af MongoDB-tekstsøgningsydelse

  3. duplikere en samling ind i sig selv

  4. Synkronisering af data fra mongoDB til elasticsearch ved hjælp af Logstash