sql >> Database >  >> NoSQL >> MongoDB

MongoDB Veel indexen versus enkele index op een reeks subdocumenten?

Dit komt er eigenlijk op neer dat 10 indexen van maat N efficiënter zijn dan één index van maat N * 10. Als je puur naar reads kijkt, dan zouden de afzonderlijke indexen altijd sneller moeten zijn. De bijbehorende b-tree-wandelingen onderzoeken een kleinere toetsenset enz.

Er zijn echter een paar punten om te overwegen:

  • Indexen op array-velden indexeren in principe elk array-element afzonderlijk. Als zodanig zal de overhead van het opzoeken maximaal 1-2 extra stappen zijn tijdens de b-tree-wandeling, wat een verwaarloosbare prestatiehit is. Met andere woorden, ze zullen bijna net zo snel zijn.
  • Het hebben van 10 indexen kan betekenen dat voor elke update/insert meer dan één index moet worden bijgewerkt (afhankelijk van of uw indexen een veld delen of dat u meer dan 1 tijdstempel tegelijk bijwerkt). Dit is een belangrijke prestatieoverweging.
  • Het gebruik van een array-index maakt het een beetje makkelijker om extra tijdstempels toe te voegen (bijv. Timestamp10).
  • Er is een limiet aan het aantal naamruimten dat u per database kunt gebruiken (24k) en elke index neemt er één in beslag. Als je een aparte index per veld maakt, kan dit een probleem worden.
  • Het belangrijkste is dat de array-index veel eenvoudiger is en uw code en dus onderhoudbaarheid vereenvoudigt. Gezien de beperkte prestatieverschillen zou ik zeggen dat dit de sterkste motivatie is om hier voor een array-index te gaan.



  1. Meerdere groepsbewerkingen met behulp van het Mongo-aggregatieraamwerk

  2. Sla een afbeelding op in MongoDB met Node.js/Express en Mongoose

  3. Een BsonArray toewijzen aan een lijst<> in een POCO

  4. Hoe MongoDB importeren met es6-stijlimport?