MongoDB Indeksering: createIndex() & dropIndex()

⚡ Smart opsummering

MongoDB Indekser gemmer et ordnet udsnit af en samlings felter, så forespørgsler kan finde dokumenter uden at scanne alle poster. Metoderne createIndex, getIndexes og dropIndex opbygger, viser og fjerner disse ydeevnekritiske strukturer.

  • 🚀 Formål: Indekser lader MongoDB Spring scanninger af hele samlingen over for hurtigere læsning.
  • 🛠️ opretindeks: Opbygger enkeltfelts- eller sammensatte indekser i stigende eller faldende rækkefølge.
  • 🔍 getIndekser: Viser en liste over alle indekser i en samling, inklusive standard _id'et.
  • 🗑️ dropIndeks: Fjerner ét indeks; dropIndexes rydder alle undtagen _id.
  • ⚖️ Afvejning: For mange indekser forsinker indsættelser, opdateringer og sletninger.
  • 🤖 AI-tuning: Assistenter anbefaler og genererer automatisk de rigtige indekser.

MongoDB Indeksering createIndex dropIndex

Hvad er MongoDB Indekser?

Indekser er meget vigtige i enhver database, og med MongoDB Det er ikke anderledes. Ved brug af indekser, udførelse af forespørgsler i MongoDB bliver mere effektiv.

Hvis du havde en samling med tusindvis af dokumenter uden indeks, og du så søger for at finde bestemte dokumenter, så i et sådant tilfælde MongoDB skulle scanne hele samlingen for at finde dokumenterne. Men hvis du havde indekser, MongoDB ville bruge disse indekser til at begrænse antallet af dokumenter, der skulle søges i samlingen.

Indekser er særlige datasæt, der lagrer en delvis del af samlingens data. Da dataene er delvise, bliver det lettere at læse disse data. Dette delvise sæt lagrer værdien af ​​et specifikt felt eller et sæt af felter, sorteret efter feltets værdi.

Forståelse af indvirkningen af ​​indekser

Selvom introduktionen har vist, at indeks er gode til forespørgsler, kan for mange indeks forsinke andre operationer, såsom Indsæt-, Slet- og Opdater-operationerne.

Hvis der hyppigt udføres indsættelses-, sletnings- og opdateringshandlinger på dokumenter, skal indeksene ændres så ofte, hvilket blot ville være en overhead for samlingen.

Nedenstående eksempel viser, hvilke feltværdier der kan udgøre et indeks i en samling. Et indeks kan enten være baseret på blot ét felt i samlingen, eller det kan være baseret på flere felter i samlingen.

I eksemplet nedenfor er medarbejder-id'et "1" og medarbejderCode "AA" bruges til at indeksere dokumenterne i samlingen. Så når der foretages en søgning, vil disse indekser blive brugt til hurtigt og effektivt at finde de nødvendige dokumenter i samlingen.

Så selvom søgeforespørgslen er baseret på medarbejderenCode "AA", ville det dokument blive returneret.

Forståelse af indvirkningen af ​​indekser

Sådan opretter du indekser: createIndex()

Oprettelse af et indeks i MongoDB gøres ved at bruge oprette indeks fremgangsmåde.

Følgende eksempel viser, hvordan man tilføjer et indeks til en samling. Lad os antage, at vi har den samme Employee-samling, som har feltnavnene "Employeeid" og "EmployeeName".

Opret indekser med createIndex

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

Code Forklaring:

  1. oprette indeks metode bruges til at oprette et indeks baseret på dokumentets "Medarbejder".
  2. Parameteren "1" angiver, at når indekset oprettes med værdierne i feltet "Employeeid", skal de sorteres i stigende rækkefølge. Bemærk venligst, at dette er forskelligt fra _id-feltet (som entydigt identificerer hvert dokument), der MongoDB oprettes automatisk. Dokumenterne vil nu blive sorteret efter medarbejder-id og ikke _id-feltet.

Hvis kommandoen udføres korrekt, vises følgende output:

Output:

createIndex-output

  1. numIndexesBefore: 1 angiver antallet af feltværdier i indekserne, før kommandoen blev kørt. Hver samling har _id-feltet, som også tæller som en feltværdi, så numIndexesBefore er 1.
  2. numIndexesAfter: 2 angiver antallet af feltværdier i indekserne efter at kommandoen blev kørt.
  3. Outputtet "ok: 1" angiver, at operationen var vellykket, og det nye indeks føjes til samlingen.

Ovenstående kode viser, hvordan man opretter et indeks baseret på én feltværdi, men man kan også oprette et indeks baseret på flere feltværdier. Følgende eksempel viser, hvordan dette kan gøres:

Opret et sammensat indeks på flere felter

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

Metoden createIndex tager nu højde for flere feltværdier, hvilket vil medføre, at indekset oprettes baseret på "Employeeid" og "EmployeeName". Employeeid:1 og EmployeeName:1 angiver, at indekset skal oprettes på disse to feltværdier, hvor :1 angiver stigende rækkefølge. Dette kaldes et sammensat indeks.

Sådan finder du indekser: getIndexes()

At finde et indeks i MongoDB gøres ved at bruge getIndexes metode. Følgende eksempel viser, hvordan dette kan gøres:

Find indekser med getIndexes

db.Employee.getIndexes()

GetIndex-metoden bruges til at finde alle indekserne i en samling.

Hvis kommandoen udføres korrekt, vises følgende output:

Output:

getIndexes-output

Outputtet returnerer et dokument, der viser, at der er to indeks i samlingen: _id-feltet og Employeeid-feltet. :1 angiver, at feltværdierne i indekset er oprettet i stigende rækkefølge.

Sådan fjerner du indekser: dropIndex()

Fjernelse af et indeks i MongoDB gøres ved at bruge dropIndeks metode. Følgende eksempel viser, hvordan dette kan gøres:

Drop indekser med dropIndex

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

dropIndex-metoden tager de nødvendige feltværdier, som skal fjernes fra indekset.

Hvis kommandoen udføres korrekt, vises følgende output:

Output:

dropIndex-output

  1. nIndexesWas: 3 angiver antallet af feltværdier i indekserne, før kommandoen blev kørt. Hver samling har _id-feltet, som også tæller som en feltværdi.
  2. Ok: 1 output angiver, at operationen var vellykket, og feltet "Medarbejder" fjernes fra indekset.

For at fjerne alle indeksene i samlingen på én gang kan man bruge kommandoen dropIndexes. Følgende eksempel viser, hvordan dette kan gøres:

Fjern alle indekser med dropIndexes

db.Employee.dropIndexes()

DropIndex-metoden vil slette alle indekser undtagen _id-indekset.

Hvis kommandoen udføres korrekt, vises følgende output:

Output:

dropIndexes output

  1. nIndexesWas: 2 angiver antallet af feltværdier i indekserne, før kommandoen blev kørt.
  2. Hver samling har _id-feltet, som også tæller som en feltværdi og ikke fjernes af MongoDB; det er, hvad denne besked angiver.
  3. Ok: 1-output angiver, at handlingen var vellykket.

Ofte Stillede Spørgsmål

Et enkeltfeltsindeks sorterer ét felt og er egnet til forespørgsler, der filtrerer udelukkende på det felt. Et sammensat indeks dækker flere felter i én struktur og er egnet til forespørgsler, der filtrerer eller sorterer på disse felter sammen. Sammensatte indeks understøtter op til 32 felter.

Feltet _id er MongoDB's primære nøgle, så hver samling automatisk får et unikt _id-indeks. Det kan ikke slettes. Derfor starter numIndexesBefore ved 1, selv før du tilføjer et brugerdefineret indeks.

Kør forespørgslen med .explain(“executionStats”). I den vindende plan betyder en IXSCAN-fase, at der blev brugt et indeks, mens en COLLSCAN betyder MongoDB scannede alle dokumenter, og et nyt indeks kan hjælpe.

Brug aggregeringsfasen $indexStats til at se, hvor ofte hvert indeks tilgås. Indekser med meget lavt forbrug spilder disk og langsomme skrivninger, så fjern dem med dropIndex for at holde samlingen sparsom.

AI-værktøjer analyserer langsomme forespørgselslogfiler og foreslår, hvilke felter der skal indekseres. MongoDBs Performance Advisor rangerer indeksanbefalinger efter effekt, helping Du tilføjer indekser med høj værdi og springer overflødige indekser over.

Ja. AI Copilot-assistenter omdanner almindeligt engelske anmodninger til korrekt createIndex-syntaks, inklusive stigende eller faldende nøgler og sammensat feltrækkefølge, og forklarer derefter det resulterende indeks.

ESR står for Equality, Sort, Range. Når du opbygger et sammensat indeks, skal du placere felter med lighedsmatch først, derefter sorteringsfelter og derefter områdefiltre. Denne rækkefølge gør det muligt MongoDB bruge indekset mest effektivt.

En dækket forespørgsel besvares udelukkende fra et indeks, uden at dokumenterne læses. Når hvert felt i filteret og projektionen findes i ét indeks, MongoDB giver resultater hurtigere.

Opsummer dette indlæg med: