MongoDB Indexering: createIndex() & dropIndex()

⚡ Slimme samenvatting

MongoDB Indexen slaan een geordende subset van de velden van een verzameling op, zodat query's documenten kunnen vinden zonder elk record te hoeven scannen. De methoden createIndex, getIndexes en dropIndex maken, tonen en verwijderen deze prestatiekritieke structuren.

  • 🚀 Doel: Indexen laten MongoDB Sla volledige collectiescans over voor snellere leesresultaten.
  • index aanmaken: Bouwt indexen op basis van één veld of samengestelde indexen in oplopende of aflopende volgorde.
  • 🔍 getIndexes: Geeft een lijst van alle indexen in een collectie, inclusief de standaard _id.
  • 🗑️ dropIndex: Verwijdert één index; dropIndexes verwijdert alle indexen behalve _id.
  • Afweging: Te veel indexen vertragen invoegingen, updates en verwijderingen.
  • 🤖 AI-tuning: Assistenten bevelen automatisch de juiste indexen aan en genereren deze.

MongoDB Indexering createIndex dropIndex

Wat zijn MongoDB Indexen?

Indexen zijn erg belangrijk in elke database, en daarmee MongoDB Het is niet anders. Door het gebruik van indexen kunnen query's worden uitgevoerd in MongoDB wordt efficiënter.

Als je een verzameling hebt met duizenden documenten zonder indexen, en je vervolgens een query uitvoert om bepaalde documenten te vinden, dan zou dat in zo'n geval problemen opleveren. MongoDB zou de hele collectie moeten scannen om de documenten te vinden. Maar als je indexen had, MongoDB zou deze indexen gebruiken om het aantal documenten dat in de collectie moest worden doorzocht te beperken.

Indexen zijn speciale datasets die een deel van de gegevens van een verzameling opslaan. Doordat de gegevens gedeeltelijk zijn, zijn ze gemakkelijker te lezen. Deze gedeeltelijke set slaat de waarde van een specifiek veld, of een set velden, op, geordend op de waarde van het veld.

Inzicht in de impact van indexen

Hoewel de inleiding heeft aangetoond dat indexen nuttig zijn voor query's, kunnen te veel indexen andere bewerkingen, zoals invoegen, verwijderen en bijwerken, vertragen.

Als er frequent invoeg-, verwijder- en updatebewerkingen op documenten worden uitgevoerd, moeten de indexen even vaak worden aangepast, wat een extra belasting voor de collectie vormt.

Het onderstaande voorbeeld laat zien welke veldwaarden een index in een collectie kunnen vormen. Een index kan gebaseerd zijn op slechts één veld in de collectie, of op meerdere velden in de collectie.

In het onderstaande voorbeeld zijn de werknemers-ID "1" en de werknemerCode "AA"-waarden worden gebruikt om de documenten in de collectie te indexeren. Wanneer er een zoekopdracht wordt uitgevoerd, worden deze indexen gebruikt om de gewenste documenten in de collectie snel en efficiënt te vinden.

Dus zelfs als de zoekopdracht is gebaseerd op de medewerker.Code "AA", dat document zou worden teruggestuurd.

Inzicht in de impact van indexen

Indexen maken: createIndex()

Een index aanmaken in MongoDB wordt gedaan met behulp van de maakIndex methode.

Het volgende voorbeeld laat zien hoe je een index aan een collectie toevoegt. Stel dat we dezelfde Employee-collectie hebben met de velden "Employeeid" en "EmployeeName".

Indexen aanmaken met createIndex

db.Employee.createIndex({Employeeid:1})

Code Uitleg:

  1. De maakIndex methode wordt gebruikt om een ​​index te maken op basis van de “Employeeid” van het document.
  2. De parameter "1" geeft aan dat wanneer de index wordt aangemaakt met de waarden van het veld "Employeeid", deze in oplopende volgorde moeten worden gesorteerd. Houd er rekening mee dat dit iets anders is dan het veld _id (dat elk document uniek identificeert). MongoDB Wordt automatisch aangemaakt. De documenten worden nu gesorteerd op basis van het Employeeid en niet op het _id-veld.

Als de opdracht succesvol wordt uitgevoerd, wordt de volgende uitvoer weergegeven:

Output:

createIndex-uitvoer

  1. De waarde van numIndexesBefore: 1 geeft het aantal veldwaarden in de indexen aan voordat de opdracht werd uitgevoerd. Elke collectie heeft het veld _id, dat ook als veldwaarde telt, dus numIndexesBefore is 1.
  2. De parameter numIndexesAfter: 2 geeft het aantal veldwaarden in de indexen aan nadat de opdracht is uitgevoerd.
  3. De uitvoer "ok: 1" geeft aan dat de bewerking succesvol was en dat de nieuwe index aan de verzameling is toegevoegd.

De bovenstaande code laat zien hoe je een index kunt maken op basis van één veldwaarde, maar je kunt ook een index maken op basis van meerdere veldwaarden. Het volgende voorbeeld laat zien hoe dit kan:

Maak een samengestelde index op meerdere velden.

db.Employee.createIndex({Employeeid:1, EmployeeName:1})

De createIndex-methode houdt nu rekening met meerdere veldwaarden, waardoor de index wordt aangemaakt op basis van "Employeeid" en "EmployeeName". Employeeid:1 en EmployeeName:1 geven aan dat de index op deze twee veldwaarden moet worden aangemaakt, waarbij :1 een oplopende volgorde aangeeft. Dit wordt een samengestelde index genoemd.

Hoe vind je indexen: getIndexes()

Een index vinden in MongoDB wordt gedaan met behulp van de indexen ophalen methode. Het volgende voorbeeld laat zien hoe dit gedaan kan worden:

Zoek indexen met getIndexes

db.Employee.getIndexes()

De getIndexes-methode wordt gebruikt om alle indexen in een verzameling te vinden.

Als de opdracht succesvol wordt uitgevoerd, wordt de volgende uitvoer weergegeven:

Output:

getIndexes-uitvoer

De uitvoer retourneert een document waaruit blijkt dat er twee indexen in de collectie aanwezig zijn: het veld _id en het veld Employeeid. De aanduiding :1 geeft aan dat de veldwaarden in de index in oplopende volgorde worden aangemaakt.

Hoe indexen te verwijderen: dropIndex()

Een index verwijderen in MongoDB wordt gedaan met behulp van de dropIndex methode. Het volgende voorbeeld laat zien hoe dit gedaan kan worden:

Verwijder indexen met dropIndex

db.Employee.dropIndex({Employeeid:1})

De dropIndex-methode ontvangt de vereiste veldwaarden die uit de index verwijderd moeten worden.

Als de opdracht succesvol wordt uitgevoerd, wordt de volgende uitvoer weergegeven:

Output:

dropIndex-uitvoer

  1. De waarde nIndexesWas: 3 geeft het aantal veldwaarden in de indexen aan voordat de opdracht werd uitgevoerd. Elke collectie heeft het veld _id, dat ook als veldwaarde telt.
  2. De ok: 1-uitvoer geeft aan dat de bewerking succesvol was en dat het veld “Employeeid” uit de index wordt verwijderd.

Om alle indexen in een collectie in één keer te verwijderen, kunt u de opdracht `dropIndexes` gebruiken. Het volgende voorbeeld laat zien hoe dit kan:

Verwijder alle indexen met dropIndexes

db.Employee.dropIndexes()

De dropIndexes-methode verwijdert alle indexen behalve de _id-index.

Als de opdracht succesvol wordt uitgevoerd, wordt de volgende uitvoer weergegeven:

Output:

dropIndexes-uitvoer

  1. De waarde nIndexesWas: 2 geeft het aantal veldwaarden in de indexen aan voordat de opdracht werd uitgevoerd.
  2. Elke collectie heeft het veld _id, dat ook als veldwaarde geldt en niet zal worden verwijderd. MongoDBDat is wat dit bericht aangeeft.
  3. De ok:1-uitvoer geeft aan dat de bewerking succesvol was.

Veelgestelde vragen

Een index met één veld sorteert op één veld en is geschikt voor query's die alleen op dat veld filteren. Een samengestelde index omvat meerdere velden in één structuur en is geschikt voor query's die op die velden samen filteren of sorteren. Samengestelde indexen ondersteunen maximaal 32 velden.

Het veld _id is MongoDBDe primaire sleutel van de collectie zorgt ervoor dat elke collectie automatisch een unieke _id-index krijgt. Deze kan niet worden verwijderd. Daarom begint numIndexesBefore al bij 1, zelfs voordat je een aangepaste index toevoegt.

Voer de query uit met .explain(“executionStats”). In het winnende plan betekent een IXSCAN-fase dat er een index is gebruikt, terwijl een COLLSCAN betekent dat er een index is gebruikt. MongoDB Ik heb alle documenten gescand en een nieuwe index kan wellicht helpen.

Gebruik de aggregatiestap $indexStats om te zien hoe vaak elke index wordt benaderd. Indexen die zeer weinig worden gebruikt, verbruiken onnodig schijfruimte en zorgen voor trage schrijfbewerkingen. Verwijder ze daarom met dropIndex om de collectie overzichtelijk te houden.

AI-tools analyseren logbestanden van trage zoekopdrachten en suggereren welke velden geïndexeerd moeten worden. MongoDB's Performance Advisor rangschikt indexaanbevelingen op basis van impact, helping Je voegt waardevolle indexen toe en laat overbodige indexen weg.

Ja. AI Copilot-assistenten zetten verzoeken in gewone taal om in de juiste createIndex-syntaxis, inclusief oplopende of aflopende sleutels en de volgorde van samengestelde velden, en leggen vervolgens de resulterende index uit.

ESR staat voor Gelijkheid, Sorteren, Bereik. Bij het bouwen van een samengestelde index plaatst u eerst de velden die overeenkomen met gelijkheid, vervolgens de sorteervelden en daarna de bereikfilters. Deze volgorde maakt het mogelijk om... MongoDB Gebruik de index zo efficiënt mogelijk.

Een gedekte query wordt volledig beantwoord vanuit een index, zonder de documenten te lezen. Wanneer elk veld in het filter en de projectie zich in één index bevindt, MongoDB Levert sneller resultaten op.

Vat dit bericht samen met: