Opprett samling
Før vi bruker indekser, må vi opprette en ny samling i vår MongoDB. Vi har allerede opprettet ett og satt inn 10 dokumenter, kalt 'Dummy'. Find() MongoDB-funksjonen viser alle postene fra 'Dummy'-samlingen på MongoDB-skallskjermen nedenfor.
test> db.Dummy.find()
Velg Indekseringstype
Før du oppretter en indeks, må du først finne ut hvilke kolonner som vanligvis vil bli brukt i søkekriterier. Indekser gir gode resultater på kolonner som ofte filtreres, sorteres eller søkes i. Felt med stor kardinalitet (mange forskjellige verdier) er ofte utmerkede indekseringsalternativer. Her er noen kodeeksempler for forskjellige indekstyper.
Eksempel 01: Enkeltfeltindeks
Det er sannsynligvis den mest grunnleggende typen indeks, som indekserer en enkelt kolonne for å øke spørringshastigheten på den kolonnen. Denne typen indeks brukes for spørringer der du bruker et enkelt nøkkelfelt for å spørre samlingspostene. Anta at du bruker 'type'-feltet til å spørre postene til samlingen 'Dummy' i finnefunksjonen som nedenfor. Denne kommandoen ville se gjennom hele samlingen, noe som kan ta lang tid for store samlinger å behandle. Derfor må vi optimalisere ytelsen til denne spørringen.
test> db.Dummy.find({type: 'emp' })
Postene til Dummy-samlingen ovenfor er funnet ved å bruke 'type'-feltet, dvs. inneholder en betingelse. Derfor kan enkeltnøkkelindeksen brukes her for å optimalisere søket. Så vi vil bruke createIndex()-funksjonen til MongoDB for å lage en indeks på 'type'-feltet til 'Dummy'-samlingen. Illustrasjonen av bruk av denne spørringen viser vellykket opprettelse av en enkeltnøkkelindeks kalt 'type_1' på skallet.
test> db.Dummy.createIndex({ type: 1 })La oss bruke find()-spørringen når den får nytte av 'type'-feltet. Operasjonen vil være betydelig raskere nå enn den tidligere brukte funn()-funksjonen ettersom indeksen er på plass fordi MongoDB kan bruke indeksen til raskt å hente postene med den forespurte stillingstittelen.
test> db.Dummy.find({type: 'emp' })
Eksempel 02: Sammensatt indeks
Det kan være lurt å se etter varer basert på ulike kriterier under visse omstendigheter. Implementering av en sammensatt indeks for disse feltene kan bidra til å forbedre søkeytelsen. La oss si at du denne gangen vil søke fra samlingen 'Dummy' ved å bruke flere felt som inneholder forskjellige søkebetingelser som søket vises. Denne spørringen har søkt etter poster fra samlingen der «type»-feltet er satt til «emp» og «sal»-feltet er større enn 350.
Den logiske operatoren $gte har blitt brukt til å bruke betingelsen på 'sal'-feltet. Totalt to poster ble returnert etter søk gjennom hele samlingen, som består av 10 poster.
test> db.Dummy.find({type: 'emp' , sal: {$gte: 350 } })
La oss lage en sammensatt indeks for det nevnte søket. Denne sammensatte indeksen har 'type' og 'sal' felt. Tallene '1' og '-1' representerer henholdsvis stigende og synkende rekkefølge for 'type' og 'sal'-feltene. Rekkefølgen til kolonnene til den sammensatte indeksen er viktig og bør samsvare med spørringsmønstrene. MongoDB har gitt navnet 'type_1_sal_-1' til denne sammensatte indeksen som vist.
test> db.Dummy.createIndex({ type: 1 , vil:- 1 })
Etter å ha brukt den samme find()-spørringen for å søke etter poster med «type»-feltverdien som «emp» og verdien av «sal»-feltet større enn lik 350, har vi fått samme utgang med en liten endring i rekkefølgen sammenlignet med det forrige søkeresultatet. Den største verdiposten for 'sal'-feltet er nå på første plass, mens den minste er på den laveste i henhold til '-1' satt for 'sal'-feltet i den sammensatte indeksen ovenfor.
test> db.Dummy.find({type: 'emp' , sal: {$gte: 350 } })
Eksempel 03: Tekstindeks
Noen ganger kan du støte på en situasjon der du bør forholde deg til et stort datasett, som store beskrivelser av produkter, ingredienser osv. En tekstindeks kan være nyttig for å gjøre fulltekstsøk i et stort tekstfelt. For eksempel har vi opprettet en ny samling kalt 'Test' i vår testdatabase. Sett inn totalt 6 poster i denne samlingen ved å bruke funksjonen insertMany() i henhold til find()-spørringen nedenfor.
test> db.Test.insertMany([{Navn: 'Ana' , av: 'Hun bor i London og er en god lærer' },
{Navn: 'Robert' , av: 'Han er en fantastisk fotballspiller' },
{Navn: 'fra' , av: 'Kanskje reise Dubai' },
{Navn: 'Jacob' , av: 'Han er tankevekkende og rik.' },
{Navn: 'Cillian' , av: 'En superstart på filmen ble bare berømmelse på noen sekunder' },
{Navn: 'Ken' , av: 'Matelsker. Hun kan spise deg også.' }
])
Nå vil vi lage en tekstindeks på 'Des'-feltet i denne samlingen, ved å bruke MongoDBs createIndex()-funksjon. Nøkkelordet 'tekst' i feltverdien viser typen til en indeks, som er en 'tekst'-indeks. Indeksnavnet, des_text, har blitt autogenerert.
test> db.Test.createIndex({ des: 'tekst' })Nå har funn()-funksjonen blitt brukt til å utføre 'tekstsøk' på samlingen via 'des_text'-indeksen. $search-operatøren ble brukt til å søke etter ordet 'mat' i samlingspostene og vise den aktuelle posten.
test> db.Test.find({ $text: { $search: 'mat' }});
Bekreft indekser:
Du kan sjekke og liste ned alle anvendte indekser for forskjellige samlinger i MongoDB. For dette, bruk getIndex()-metoden sammen med navnet på en samling i MongoDB-skallskjermen. Vi har brukt denne kommandoen separat for 'Test' og 'Dummy' samlingene. Dette viser all nødvendig informasjon om de innebygde og brukerdefinerte indeksene på skjermen.
test> db.Test.getIndex()test> db.Dummy.getIndex()
Drop-indekser:
Det er på tide å slette indeksene som tidligere ble opprettet for samlingen ved å bruke dropIndex()-funksjonen sammen med det samme feltnavnet som indeksen ble brukt på. Spørsmålet nedenfor viser at enkeltindeksen er fjernet.
test> db.Dummy.dropIndex({type: 1 })
På samme måte kan den sammensatte indeksen droppes.
test> db.Dummy.drop index({type: 1 , vil: 1 })
Konklusjon
Ved å øke hastigheten på henting av data fra MongoDB, er indeksering avgjørende for å øke effektiviteten til spørringer. Manglende indekser må MongoDB søke i hele samlingen etter samsvarende poster, noe som blir mindre effektivt ettersom settets størrelse øker. MongoDBs evne til raskt å oppdage de riktige postene ved å bruke indeksdatabasestrukturen, fremskynder behandlingen av spørringer når passende indeksering brukes.