sql >> Database >  >> NoSQL >> MongoDB

Sorteren op Meerdere velden mongo DB

De MongoDB-queryoptimalisatie werkt door verschillende plannen uit te proberen om te bepalen welke aanpak het beste werkt voor een bepaalde query. Het winnende plan voor dat querypatroon wordt vervolgens in de cache opgeslagen voor de volgende ~1.000 zoekopdrachten of totdat u een explain() doet .

Om te begrijpen welke zoekplannen zijn overwogen, moet u explain(1) . gebruiken , bijvoorbeeld:

db.col.find({category:'A'}).sort({updated: -1}).explain(1)

De allPlans detail toont alle plannen die werden vergeleken.

Als u een zoekopdracht uitvoert die niet erg selectief is (bijvoorbeeld als veel records voldoen aan uw criteria van {category: { $ne:'A'}} ), kan het voor MongoDB sneller zijn om resultaten te vinden met behulp van een BasicCursor (tabelscan) in plaats van te matchen met een index.

De volgorde van velden in de query maakt over het algemeen geen verschil voor de indexselectie (er zijn enkele uitzonderingen met bereikquery's). De volgorde van velden in een sorteer heeft wel invloed op de indexselectie. Als uw sort() criteria komt niet overeen met de indexvolgorde, de resultaatgegevens moeten opnieuw worden gesorteerd nadat de index is gebruikt (u zou scanAndOrder:true moeten zien in de uitvoer uitleggen als dit gebeurt).

Het is ook vermeldenswaard dat MongoDB slechts één index per zoekopdracht zal gebruiken (met uitzondering van $or s).

Dus als u de zoekopdracht probeert te optimaliseren:

db.col.find({category:'A'}).sort({updated: -1, rating: -1})

U wilt alle drie de velden in de index opnemen:

db.col.ensureIndex({category: 1, updated: -1, rating: -1})

Ter info, als je een bepaalde zoekopdracht wilt forceren om een ​​index te gebruiken (over het algemeen niet nodig of aanbevolen), is er een hint() optie die u kunt proberen.



  1. Hoe configureer ik mijn MongoDB om rekening te houden met UTF-8?

  2. Cassandra vs. MongoDB:welke moet je kiezen?

  3. mongodb 3.x-stuurprogramma Android-compatibiliteit

  4. Hoe een veld in mongodb te verhogen?