sql >> Database >  >> NoSQL >> MongoDB

Wat is de juiste manier om te indexeren in MongoDB als er een grote combinatie van velden bestaat?

Over het algemeen zijn indexen alleen nuttig als ze zich boven een selectieve bevinden veld. Dit betekent dat het aantal documenten met een bepaalde waarde klein is ten opzichte van het totale aantal documenten.

Wat 'klein' betekent, hangt af van de dataset en de zoekopdracht. Een selectiviteit van 1% is redelijk veilig om te beslissen of een index zinvol is. Als een bepaalde waarde in bijvoorbeeld 10% van de documenten voorkomt, kan het uitvoeren van een tabelscan efficiënter zijn dan het gebruik van een index over het betreffende veld.

Met dat in gedachten zullen sommige van uw velden selectief zijn en sommige zullen dat niet zijn. Ik vermoed bijvoorbeeld dat filteren op "OK" niet erg selectief zal zijn. U kunt niet-selectieve velden uit de indexeringsoverwegingen verwijderen - als iemand alle bestellingen wil die "OK" zijn zonder andere voorwaarden, zal hij uiteindelijk een tafelscan doen. Als iemand bestellingen wil die "OK" zijn en andere voorwaarden hebben, wordt de index gebruikt die van toepassing is op andere voorwaarden.

Nu u selectieve (of op zijn minst enigszins selectieve) velden overhoudt, moet u overwegen welke zoekopdrachten zowel populair als selectief zijn. Misschien zou merk + type bijvoorbeeld zo'n combinatie zijn. U kunt samengestelde indexen toevoegen die overeenkomen met populaire zoekopdrachten waarvan u verwacht dat ze selectief zijn.

Wat gebeurt er als iemand alleen op merk filtert? Dit kan selectief zijn of niet, afhankelijk van de gegevens. Als u al een samengestelde index op merk+type heeft, laat u het aan de database over om te bepalen of een zoekopdracht met alleen een merk efficiënter is om te vervullen via de merk+type-index of via een collectiescan.

Ga op deze manier verder met andere populaire zoekopdrachten en velden.



  1. HBase en Hive – Samen beter

  2. Kan geen werkend meteor.js-project maken op een zwervende doos

  3. Hoe een waarde uit mongoDB op te halen, op basis van de sleutelnaam?

  4. Filter met regex MongoDB C#-stuurprogramma