MongoDB Indeksering: createIndex() og dropIndex()

โšก Smart oppsummering

MongoDB Indekser lagrer et ordnet delsett av feltene i en samling, slik at spรธrringer kan finne dokumenter uten รฅ skanne hver eneste post. Metodene createIndex, getIndexes og dropIndex bygger, viser og fjerner disse ytelseskritiske strukturene.

  • ๐Ÿš€ Formรฅl: Indekser lar MongoDB hopp over skanninger av hele samlingen for raskere lesing.
  • ๐Ÿ› ๏ธ opprettindeks: Bygger indekser med ett felt eller sammensatte indekser i stigende eller synkende rekkefรธlge.
  • ๐Ÿ” getIndekser: Viser alle indekser i en samling, inkludert standard _id.
  • ๐Ÿ—‘๏ธ dropIndeks: Fjerner รฉn indeks; dropIndexes fjerner alle unntatt _id.
  • ๐Ÿ‡ง๐Ÿ‡ท Avveining: For mange indekser forsinker innsettinger, oppdateringer og slettinger.
  • ๐Ÿค– AI-tuning: Assistenter anbefaler og genererer de riktige indeksene automatisk.

MongoDB Indeksering createIndex dropIndex

Hva er MongoDB Indekser?

Indekser er svรฆrt viktige i enhver database, og med MongoDB det er ikke annerledes. Ved bruk av indekser, utfรธre spรธrringer i MongoDB blir mer effektiv.

Hvis du hadde en samling med tusenvis av dokumenter uten indekser, og du deretter spรธr for รฅ finne bestemte dokumenter, sรฅ i et slikt tilfelle MongoDB mรฅ skanne hele samlingen for รฅ finne dokumentene. Men hvis du hadde indekser, MongoDB ville bruke disse indeksene for รฅ begrense antall dokumenter som mรฅtte sรธkes i samlingen.

Indekser er spesielle datasett som lagrer en delvis del av samlingens data. Siden dataene er delvise, blir det enklere รฅ lese disse dataene. Dette delvise settet lagrer verdien av et bestemt felt, eller et sett med felt, sortert etter verdien i feltet.

Forstรฅ virkningen av indekser

Selv om introduksjonen har vist at indekser er bra for spรธrringer, kan for mange indekser forsinke andre operasjoner, som for eksempel innsettings-, slettings- og oppdateringsoperasjonene.

Hvis det utfรธres hyppige innsettings-, slettings- og oppdateringsoperasjoner pรฅ dokumenter, mรฅ indeksene endres sรฅ ofte, noe som bare vil vรฆre en overhead for samlingen.

Eksemplet nedenfor viser hvilke feltverdier som kan utgjรธre en indeks i en samling. En indeks kan enten vรฆre basert pรฅ bare ett felt i samlingen, eller den kan vรฆre basert pรฅ flere felt i samlingen.

I eksemplet nedenfor er ansatt-ID-en ยซ1ยป og ansattCode ยซAAยป brukes til รฅ indeksere dokumentene i samlingen. Sรฅ nรฅr et sรธk gjรธres, vil disse indeksene bli brukt til รฅ raskt og effektivt finne de nรธdvendige dokumentene i samlingen.

Sรฅ selv om sรธket er basert pรฅ den ansatteCode ยซAAยป, det dokumentet ville bli returnert.

Forstรฅ virkningen av indekser

Hvordan lage indekser: createIndex()

Opprette en indeks i MongoDB gjรธres ved รฅ bruke createIndex metoden.

Fรธlgende eksempel viser hvordan du legger til en indeks i en samling. La oss anta at vi har den samme Employee-samlingen, som har feltnavnene ยซEmployeeidยป og ยซEmployeeNameยป.

Lag indekser med createIndex

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

Code Forklaring:

  1. Ocuco createIndex metoden brukes til รฅ lage en indeks basert pรฅ "Ansatt" i dokumentet.
  2. Parameteren ยซ1ยป indikerer at nรฅr indeksen opprettes med verdiene i feltet ยซEmployeeidยป, skal de sorteres i stigende rekkefรธlge. Vรฆr oppmerksom pรฅ at dette er forskjellig fra _id-feltet (som unikt identifiserer hvert dokument) som MongoDB opprettes automatisk. Dokumentene vil nรฅ bli sortert i henhold til ansatt-ID og ikke _id-feltet.

Hvis kommandoen utfรธres, vil fรธlgende utdata vises:

Utgang:

createIndex-utdata

  1. numIndexesBefore: 1 angir antall feltverdier i indeksene fรธr kommandoen ble kjรธrt. Hver samling har _id-feltet, som ogsรฅ teller som en feltverdi, sรฅ numIndexesBefore er 1.
  2. numIndexesAfter: 2 angir antall feltverdier i indeksene etter at kommandoen ble kjรธrt.
  3. Utdataene ยซok: 1ยป angir at operasjonen var vellykket, og den nye indeksen legges til i samlingen.

Koden ovenfor viser hvordan man oppretter en indeks basert pรฅ รฉn feltverdi, men man kan ogsรฅ opprette en indeks basert pรฅ flere feltverdier. Fรธlgende eksempel viser hvordan dette kan gjรธres:

Opprett sammensatt indeks pรฅ flere felt

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

Metoden createIndex tar nรฅ hensyn til flere feltverdier, noe som fรธrer til at indeksen opprettes basert pรฅ ยซEmployeeidยป og ยซEmployeeNameยป. Employeeid:1 og EmployeeName:1 indikerer at indeksen skal opprettes pรฅ disse to feltverdiene, der :1 indikerer stigende rekkefรธlge. Dette er kjent som en sammensatt indeks.

Slik finner du indekser: getIndexes()

ร… finne en indeks i MongoDB gjรธres ved รฅ bruke getIndekser metode. Fรธlgende eksempel viser hvordan dette kan gjรธres:

Finn indekser med getIndexes

db.Employee.getIndexes()

GetIndex-metoden brukes til รฅ finne alle indeksene i en samling.

Hvis kommandoen utfรธres, vil fรธlgende utdata vises:

Utgang:

getIndexes-utdata

Utdataene returnerer et dokument som viser at det er to indekser i samlingen: _id-feltet og Employeeid-feltet. :1 indikerer at feltverdiene i indeksen er opprettet i stigende rekkefรธlge.

Slik fjerner du indekser: dropIndex()

Fjerne en indeks i MongoDB gjรธres ved รฅ bruke dropIndeks metode. Fรธlgende eksempel viser hvordan dette kan gjรธres:

Slipp indekser med dropIndex

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

dropIndex-metoden tar de nรธdvendige feltverdiene som mรฅ fjernes fra indeksen.

Hvis kommandoen utfรธres, vil fรธlgende utdata vises:

Utgang:

dropIndex-utdata

  1. nIndexesWas: 3 angir antall feltverdier i indeksene fรธr kommandoen ble kjรธrt. Hver samling har _id-feltet, som ogsรฅ teller som en feltverdi.
  2. Ok: 1-utgangen spesifiserer at operasjonen var vellykket, og "Ansatt"-feltet fjernes fra indeksen.

For รฅ fjerne alle indeksene i samlingen samtidig, kan man bruke kommandoen dropIndexes. Fรธlgende eksempel viser hvordan dette kan gjรธres:

Slett alle indekser med dropIndexes

db.Employee.dropIndexes()

DropIndex-metoden vil slette alle indeksene bortsett fra _id-indeksen.

Hvis kommandoen utfรธres, vil fรธlgende utdata vises:

Utgang:

dropIndexes-utdata

  1. nIndexesWas: 2 angir antall feltverdier i indeksene fรธr kommandoen ble kjรธrt.
  2. Hver samling har _id-feltet, som ogsรฅ teller som en feltverdi og ikke vil bli fjernet av MongoDB; det er det denne meldingen indikerer.
  3. Ok: 1-utgangen spesifiserer at operasjonen var vellykket.

Spรธrsmรฅl og svar

En indeks med ett felt sorterer ett felt og passer til spรธrringer som filtrerer kun pรฅ det feltet. En sammensatt indeks dekker flere felt i รฉn struktur og passer til spรธrringer som filtrerer eller sorterer pรฅ disse feltene sammen. Sammensatte indekser stรธtter opptil 32 felt.

_id-feltet er MongoDBs primรฆrnรธkkel, slik at hver samling fรฅr en unik _id-indeks automatisk. Den kan ikke slettes. Det er derfor numIndexesBefore starter pรฅ 1 selv fรธr du legger til noen tilpasset indeks.

Kjรธr spรธrringen med .explain(โ€œexecutionStatsโ€). I vinnerplanen betyr et IXSCAN-stadium at en indeks ble brukt, mens et COLLSCAN betyr MongoDB skannet alle dokumenter, og en ny indeks kan hjelpe.

Bruk aggregeringsfasen $indexStats for รฅ se hvor ofte hver indeks รฅpnes. Indekser med svรฆrt lav bruk slรธser med disk og treg skriving, sรฅ fjern dem med dropIndex for รฅ holde samlingen sparsom.

AI-verktรธy analyserer logger for trege spรธrringer og foreslรฅr hvilke felt som skal indekseres. MongoDBs Performance Advisor rangerer indeksanbefalinger etter innvirkning, helping du legger til indekser med hรธy verdi og hopper over overflรธdige indekser.

Ja. AI Copilot-assistenter omgjรธr forespรธrsler pรฅ vanlig engelsk til korrekt createIndex-syntaks, inkludert stigende eller synkende nรธkler og sammensatt feltrekfรธlge, og forklarer deretter den resulterende indeksen.

ESR stรฅr for Equality, Sort, Range. Nรฅr du bygger en sammensatt indeks, plasserer du felt for likhetsmatch fรธrst, deretter sorteringsfelt og deretter omrรฅdefiltre. Denne rekkefรธlgen lar MongoDB bruke indeksen mest effektivt.

En dekket spรธrring besvares utelukkende fra en indeks, uten รฅ lese dokumentene. Nรฅr hvert felt i filteret og projeksjonen ligger i รฉn indeks, MongoDB gir resultater raskere.

Oppsummer dette innlegget med: