Kako izboljšati poizvedbe z indeksiranjem MongoDB

Kako Izboljsati Poizvedbe Z Indeksiranjem Mongodb



Izboljšanje hitrosti poizvedb je bistveno za MongoDB in vse druge sisteme baz podatkov. Z gradnjo podatkovnih struktur, ki pomagajo MongoDB pri hitrejšem prepoznavanju zapisov, je indeksiranje močan pristop k pospešitvi in ​​optimizaciji iskanja. Indeksi vključujejo kopije nekaterih podatkov iz evidenc, da so poizvedbe učinkovitejše. To poenostavi trud, vložen pri odgovarjanju na zahteve v MongoDB. V tem priročniku bomo razpravljali o uporabi indeksov s pomočjo različnih tipov indeksiranja.

Ustvari zbirko

Preden uporabimo indekse, moramo ustvariti novo zbirko v naši MongoDB. Enega smo že ustvarili in vstavili 10 dokumentov z imenom »Dummy«. Funkcija find() MongoDB prikaže vse zapise iz zbirke »Dummy« na spodnjem zaslonu lupine MongoDB.

test> db.Dummy.find()







Izberite vrsto indeksiranja

Preden vzpostavite indeks, morate najprej določiti stolpce, ki bodo običajno uporabljeni v merilih poizvedbe. Indeksi delujejo dobro v stolpcih, ki so pogosto filtrirani, razvrščeni ali preiskovani. Polja z veliko kardinalnostjo (veliko različnih vrednosti) so pogosto odlične možnosti indeksiranja. Tukaj je nekaj primerov kode za različne vrste indeksov.



Primer 01: Indeks enega polja

To je verjetno najbolj temeljna vrsta indeksa, ki indeksira en stolpec, da poveča hitrost poizvedbe v tem stolpcu. Ta vrsta indeksa se uporablja za poizvedbe, v katerih uporabite eno ključno polje za poizvedovanje po zapisih zbirke. Predpostavimo, da uporabljate polje »type« za poizvedovanje po zapisih zbirke »Dummy« znotraj funkcije iskanja, kot je prikazano spodaj. Ta ukaz bi pregledal celotno zbirko, kar bi lahko trajalo dolgo časa za obdelavo velikih zbirk. Zato moramo optimizirati delovanje te poizvedbe.



test> db.Dummy.find({tip: 'emp' })





Zapisi zgornje zbirke Dummy so bili najdeni z uporabo polja »vrsta«, tj. vsebuje pogoj. Zato je tukaj mogoče uporabiti indeks z enim ključem za optimizacijo iskalne poizvedbe. Zato bomo uporabili funkcijo createIndex() MongoDB za ustvarjanje indeksa v polju »type« zbirke »Dummy«. Ilustracija uporabe te poizvedbe prikazuje uspešno ustvarjanje indeksa z enim ključem z imenom »type_1« na lupini.

test> db.Dummy.createIndex({ vrsta: 1 })

Uporabimo poizvedbo find(), ko pridobi uporabo polja »type«. Operacija bo zdaj znatno hitrejša kot prej uporabljena funkcija find(), saj je indeks na mestu, ker lahko MongoDB uporabi indeks za hitro pridobivanje zapisov z zahtevanim nazivom delovnega mesta.



test> db.Dummy.find({tip: 'emp' })

Primer 02: Sestavljeni indeks

V določenih okoliščinah bomo morda želeli iskati predmete na podlagi različnih meril. Implementacija sestavljenega indeksa za ta polja lahko pomaga izboljšati zmogljivost poizvedbe. Recimo, da tokrat želite iskati iz zbirke »Dummy« z uporabo več polj, ki vsebujejo različne pogoje iskanja, kot jih prikaže poizvedba. Ta poizvedba je iskala zapise iz zbirke, kjer je polje »type« nastavljeno na »emp«, polje »sal« pa je večje od 350.

Za uporabo pogoja v polju »sal« je bil uporabljen logični operator $gte. Po iskanju po celotni zbirki, ki jo sestavlja 10 plošč, sta bili vrnjeni skupno dve plošči.

test> db.Dummy.find({tip: 'emp' , sal: {$gte: 350 } })

Ustvarimo sestavljeni indeks za zgoraj omenjeno poizvedbo. Ta sestavljeni indeks ima polji »type« in »sal«. Števili »1« in »-1« predstavljata naraščajoči oziroma padajoči vrstni red za polja »type« in »sal«. Zaporedje stolpcev sestavljenega indeksa je pomembno in mora ustrezati vzorcem poizvedbe. MongoDB je temu prikazanemu sestavljenemu indeksu dal ime »type_1_sal_-1«.

test> db.Dummy.createIndex({ vrsta: 1 , volja:- 1 })

Po uporabi iste poizvedbe find() za iskanje zapisov z vrednostjo polja »type« kot »emp« in vrednostjo polja »sal«, ki je večja od 350, smo dobili enak rezultat z rahlo spremembo vrstnega reda v primerjavi s prejšnjim rezultatom poizvedbe. Zapis z večjo vrednostjo za polje »sal« je zdaj na prvem mestu, medtem ko je najmanjša na najnižjem glede na »-1«, nastavljeno za polje »sal« v zgornjem sestavljenem indeksu.

test> db.Dummy.find({tip: 'emp' , sal: {$gte: 350 } })

Primer 03: Besedilno kazalo

Včasih lahko naletite na situacijo, ko bi se morali ukvarjati z velikim naborom podatkov, kot so veliki opisi izdelkov, sestavin itd. Besedilni indeks je lahko koristen za iskanje po celotnem besedilu v velikem besedilnem polju. Ustvarili smo na primer novo zbirko z imenom »Test« v naši testni bazi podatkov. V to zbirko je bilo vstavljenih skupno 6 zapisov s funkcijo insertMany() v skladu s spodnjo poizvedbo find().

test> db.Test.insertMany([

{ime: 'Ana' , od: 'Živi v Londonu in je dobra učiteljica' },

{ime: 'Robert' , od: 'On je tako izjemen nogometaš' },

{ime: 'od' , od: 'Morda potujem v Dubaj' },

{ime: 'Jacob' , od: 'On je osupljiv in bogat.' },

{ime: 'Cillian' , od: 'Filmski super začetek je zaslovel v hipu' },

{ime: 'Ken' , od: 'Ljubiteljica hrane. Tudi tebe lahko poje.' }

])

Zdaj bomo ustvarili besedilni indeks v polju »Des« te zbirke z uporabo funkcije createIndex() MongoDB. Ključna beseda »besedilo« v vrednosti polja prikazuje vrsto indeksa, ki je »besedilni« indeks. Ime indeksa des_text je bilo samodejno ustvarjeno.

test> db.Test.createIndex({ des: 'besedilo' })

Zdaj je bila funkcija find() uporabljena za izvajanje »iskanje po besedilu« v zbirki prek indeksa »des_text«. Operator $search je bil uporabljen za iskanje besede 'hrana' v zapisih zbirke in prikaz tega določenega zapisa.

test> db.Test.find({ $text: { $search: 'hrana' }});

Preverite indekse:

V svojem MongoDB lahko preverite in navedete vse uporabljene indekse različnih zbirk. Za to uporabite metodo getIndexes() skupaj z imenom zbirke na zaslonu lupine MongoDB. Ta ukaz smo uporabili ločeno za zbirki »Test« in »Dummy«. To prikazuje vse potrebne informacije o vgrajenih in uporabniško določenih indeksih na vašem zaslonu.

test> db.Test.getIndexes()

test> db.Dummy.getIndexes()

Spustite indekse:

Čas je, da izbrišete indekse, ki so bili predhodno ustvarjeni za zbirko s funkcijo dropIndex(), skupaj z istim imenom polja, za katerega je bil uporabljen indeks. Spodnja poizvedba kaže, da je bil posamezen indeks odstranjen.

test> db.Dummy.dropIndex({vrsta: 1 })

Na enak način lahko opustite sestavljeni indeks.

test> db.Dummy.drop index({vrsta: 1 , volja: 1 })

Zaključek

S pospešitvijo pridobivanja podatkov iz MongoDB je indeksiranje bistveno za izboljšanje učinkovitosti poizvedb. Ker nima indeksov, mora MongoDB preiskati celotno zbirko ujemajočih se zapisov, kar postane manj učinkovito, ko se velikost niza poveča. Zmožnost MongoDB, da hitro odkrije prave zapise z uporabo strukture baze podatkov indeksa, pospeši obdelavo poizvedb, ko se uporabi ustrezno indeksiranje.