Hvordan forbedre spørringer med MongoDB-indeksering

Hvordan Forbedre Sporringer Med Mongodb Indeksering



Forbedring av spørringshastigheten er avgjørende for MongoDB og alle andre databasesystemer. Ved å bygge datastrukturer som hjelper MongoDB med å identifisere poster raskere, er indeksering en potent tilnærming for å øke hastigheten og optimalisere søk. Indekser inkluderer kopier av noen av dataene fra poster for å gjøre forespørsler mer effektive. Dette effektiviserer innsatsen som er involvert i å svare på forespørsler i MongoDB. I denne veiledningen vil vi diskutere bruken av indekser ved hjelp av ulike indekseringstyper.

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.