MongoDB Indekseringsvejledning – createIndex(), dropindex() Eksempel
Indekser er meget vigtige i enhver database, og med MongoDB det er ikke anderledes. Med brug af indekser, udfører forespørgsler i MongoDB bliver mere effektiv.
Hvis du havde en samling med tusindvis af dokumenter uden indekser, og du forespørger 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.
Indeks er specielle datasæt, som gemmer en del af samlingens data. Da dataene er delvise, bliver det lettere at læse disse data. Dette delvise sæt gemmer værdien af et specifikt felt eller et sæt felter ordnet efter feltets værdi.
Forståelse af indvirkningen af indekser
Selvom vi fra introduktionen har set, at indekser er gode til forespørgsler, men at have for mange indekser kan bremse andre operationer såsom Indsæt, Slet og Opdater operationen.
Hvis der er hyppige indsættelses-, sletnings- og opdateringsoperationer udført på dokumenter, så skal indekserne ændre det ofte, hvilket blot ville være en overhead for samlingen.
Nedenstående eksempel viser et eksempel på, hvilke feltværdier der kunne udgøre et indeks i en samling. Et indeks kan enten være baseret på kun ét felt i samlingen, eller det kan være baseret på flere felter i samlingen.
I eksemplet nedenfor bruges medarbejder-id "1" og medarbejderkode "AA" til at indeksere dokumenterne i samlingen. Så når der foretages en forespørgselssø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å EmployeeCode "AA", ville dette dokument blive returneret.
Sådan opretter du indekser: createIndex()
Oprettelse af et indeks i MongoDB gøres ved at bruge "oprette indeks”Metode.
Følgende eksempel viser, hvordan du tilføjer indeks til samling. Lad os antage, at vi har vores samme medarbejdersamling, som har feltnavnene "Medarbejder-id" og "Medarbejdernavn".
db.Employee.createIndex({Employeeid:1})
Kodeforklaring:
- oprette indeks metode bruges til at oprette et indeks baseret på dokumentets "Medarbejder".
- Parameteren '1' angiver, at når indekset oprettes med feltværdierne "Medarbejder", skal de sorteres i stigende rækkefølge. Bemærk venligst, at dette er forskelligt fra feltet _id (id-feltet bruges til entydigt at identificere hvert dokument i samlingen), som oprettes automatisk i samlingen af MongoDB. Dokumenterne vil nu blive sorteret efter medarbejder-id og ikke _id-feltet.
Hvis kommandoen udføres med succes, vil følgende output blive vist:
Output:
- numIndexBefore: 1 angiver antallet af feltværdier (De faktiske felter i samlingen), som var der i indekserne, før kommandoen blev kørt. Husk, at hver samling har feltet _id, som også tæller som en feltværdi til indekset. Da _id-indeksfeltet er en del af samlingen, når det oprindeligt oprettes, er værdien af numIndexBefore 1.
- numIndexAfter: 2 angiver antallet af feltværdier, der var der i indekserne efter kommandoen blev kørt.
- Her angiver "ok: 1"-outputtet, 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;
db.Employee.createIndex({Employeeid:1, EmployeeName:1])
Kodeforklaring:
- CreateIndex-metoden tager nu højde for flere feltværdier, som nu vil få indekset til at blive oprettet baseret på "Employeeid" og "EmployeeName". Employeeid:1 og EmployeeName:1 angiver, at indekset skal oprettes på disse 2 feltværdier med :1, der angiver, at det skal være i stigende rækkefølge.
Sådan finder du indekser: getindexes()
Find et indeks i MongoDB gøres ved at bruge "getIndex" fremgangsmåde.
Følgende eksempel viser, hvordan dette kan gøres;
db.Employee.getIndexes()
Kodeforklaring:
- GetIndex-metoden bruges til at finde alle indekserne i en samling.
Hvis kommandoen udføres med succes, vil følgende output blive vist:
Output:
- Outputtet returnerer et dokument, som blot viser, at der er 2 indekser i samlingen, som er _id-feltet, og det andet er Employee-id-feltet. :1 angiver, at feltværdierne i indekset er oprettet i stigende rækkefølge.
Sådan dropper du indekser: dropindex()
Fjernelse af et indeks i MongoDB gøres ved at bruge dropIndex-metoden.
Følgende eksempel viser, hvordan dette kan gøres;
db.Employee.dropIndex(Employeeid:1)
Kodeforklaring:
- DropIndex-metoden tager de nødvendige feltværdier, som skal fjernes fra indekset.
Hvis kommandoen udføres med succes, vil følgende output blive vist:
Output:
- nIndexWas: 3 angiver antallet af feltværdier, der var der i indekserne, før kommandoen blev kørt. Husk, at hver samling har feltet _id, som også tæller som en feltværdi til indekset.
- Ok: 1 output angiver, at operationen var vellykket, og feltet "Medarbejder" fjernes fra indekset.
For at fjerne alle indekserne på én gang i samlingen kan man bruge kommandoen dropIndex.
Følgende eksempel viser, hvordan dette kan gøres.
db.Employee.dropIndex()
Kodeforklaring:
- DropIndex-metoden vil slette alle indekser undtagen _id-indekset.
Hvis kommandoen udføres med succes, vil følgende output blive vist:
Output:
- nIndexWas: 2 angiver antallet af feltværdier, der var der i indekserne, før kommandoen blev kørt.
- Husk igen, at hver samling har _id-feltet, som også tæller som en feltværdi til indekset, og som ikke fjernes af MongoDB og det er, hvad denne besked indikerer.
- Ok: 1-output angiver, at handlingen var vellykket.
Resumé
- Det er vigtigt at definere indekser for hurtigere og effektiv søgning af dokumenter i en samling.
- Indekser kan oprettes ved at bruge createIndex-metoden. Indekser kan oprettes på kun ét felt eller flere feltværdier.
- Indekser kan findes ved at bruge getIndex-metoden.
- Indekser kan fjernes ved at bruge dropIndex for enkelte indekser eller dropIndex for at slette alle indekser.