Cum să îmbunătățiți interogările cu indexarea MongoDB

Cum Sa Imbunatatiti Interogarile Cu Indexarea Mongodb



Îmbunătățirea vitezei de interogare este esențială pentru MongoDB și pentru toate celelalte sisteme de baze de date. Prin construirea de structuri de date care ajută MongoDB să identifice mai rapid înregistrările, indexarea este o abordare puternică pentru accelerarea și optimizarea căutărilor. Indexurile includ copii ale unora dintre datele din înregistrări pentru a face cercetările mai eficiente. Acest lucru simplifică efortul implicat în răspunsul la solicitările din MongoDB. În acest ghid, vom discuta despre utilizarea indexurilor cu ajutorul diferitelor tipuri de indexare.

Creați o colecție

Înainte de a folosi indecși, trebuie să creăm o nouă colecție în MongoDB. Am creat deja unul și am introdus 10 documente, numite „Dummy”. Funcția find() MongoDB afișează toate înregistrările din colecția „Dummy” pe ecranul shell MongoDB de mai jos.

test> db.Dummy.find()







Alegeți Tipul de indexare

Înainte de a stabili un index, trebuie mai întâi să determinați coloanele care vor fi utilizate în mod obișnuit în criteriile de interogare. Indecșii funcționează bine pe coloanele care sunt frecvent filtrate, sortate sau căutate. Câmpurile cu o cardinalitate mare (multe valori diferite) sunt adesea opțiuni excelente de indexare. Iată câteva exemple de cod pentru diferite tipuri de index.



Exemplul 01: Index un singur câmp

Este probabil cel mai fundamental tip de index, care indexează o singură coloană pentru a îmbunătăți viteza de interogare pe acea coloană. Acest tip de index este utilizat pentru interogări în care utilizați un singur câmp cheie pentru a interoga înregistrările colecției. Să presupunem că utilizați câmpul „type” pentru a interoga înregistrările colecției „Dummy” în cadrul funcției de căutare, ca mai jos. Această comandă ar analiza întreaga colecție, ceea ce ar putea dura mult timp pentru procesarea colecțiilor uriașe. Prin urmare, trebuie să optimizăm performanța acestei interogări.



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





Înregistrările colecției Dummy de mai sus au fost găsite folosind câmpul „tip”, adică conținând o condiție. Prin urmare, indexul cu o singură cheie poate fi utilizat aici pentru a optimiza interogarea de căutare. Deci, vom folosi funcția createIndex() a MongoDB pentru a crea un index în câmpul „tip” al colecției „Dummy”. Ilustrația utilizării acestei interogări afișează crearea cu succes a unui index cu o singură cheie numit „type_1” pe shell.

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

Să folosim interogarea find() odată ce câștigă folosind câmpul „tip”. Operațiunea va fi mult mai rapidă acum decât funcția find() folosită anterior, deoarece indexul este în vigoare, deoarece MongoDB poate utiliza indexul pentru a prelua rapid înregistrările cu titlul postului solicitat.



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

Exemplul 02: Index compus

Este posibil să dorim să căutăm articole pe baza diferitelor criterii în anumite circumstanțe. Implementarea unui index compus pentru aceste câmpuri poate ajuta la îmbunătățirea performanței interogărilor. Să presupunem că, de data aceasta, doriți să căutați din colecția „Dummy” folosind mai multe câmpuri care conțin diferite condiții de căutare așa cum este afișată interogarea. Această interogare a căutat înregistrări din colecția în care câmpul „tip” este setat la „emp”, iar câmpul „sal” este mai mare de 350.

Operatorul logic $gte a fost folosit pentru a aplica condiția câmpului „sal”. Un total de două înregistrări au fost returnate după căutarea în întreaga colecție, care constă din 10 înregistrări.

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

Să creăm un index compus pentru interogarea menționată mai sus. Acest index compus are câmpuri „tip” și „sal”. Numerele „1” și „-1” reprezintă ordinea crescătoare și, respectiv, descrescătoare pentru câmpurile „tip” și „sal”. Secvența coloanelor indexului compus este importantă și ar trebui să corespundă modelelor de interogare. MongoDB a dat numele „type_1_sal_-1” acestui index compus așa cum este afișat.

test> db.Dummy.createIndex({ tip: 1 , voi:- 1 })

După ce am folosit aceeași interogare find() pentru a căuta înregistrări cu valoarea câmpului „type” ca „emp” și valoarea câmpului „sal” mai mare decât egală cu 350, am obținut aceeași ieșire cu o ușoară modificare a ordinii comparativ cu rezultatul interogării anterioare. Înregistrarea valorii mai mari pentru câmpul „sal” este acum pe primul loc, în timp ce cea mai mică este la cea mai mică, conform „-1” setat pentru câmpul „sal” din indexul compus de mai sus.

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

Exemplul 03: Index text

Uneori, puteți întâlni o situație în care ar trebui să vă ocupați de un set mare de date, cum ar fi descrieri mari de produse, ingrediente etc. Un index de text poate fi util pentru a efectua căutări full-text pe un câmp de text mare. De exemplu, am creat o nouă colecție numită „Test” în baza noastră de date de testare. S-au introdus un total de 6 înregistrări în această colecție folosind funcția insertMany() conform interogării find() de mai jos.

test> db.Test.insertMany([

{Nume: 'Ana' , din: „Trăiește la Londra și este o profesoară bună” },

{Nume: 'Robert' , din: „Este un fotbalist minunat” },

{Nume: 'din' , din: „S-ar putea să călătorească în Dubai” },

{Nume: 'Iacov' , din: „Este uimitor și bogat”. },

{Nume: 'Cillian' , din: „Un super început de film a căpătat faimă în câteva secunde” },

{Nume: 'Ken' , din: 'Iubitor de mâncare. Te poate mânca și pe tine.' }

])

Acum, vom crea un index de text în câmpul „Des” al acestei colecții, utilizând funcția createIndex() de la MongoDB. Cuvântul cheie „text” din valoarea câmpului afișează tipul unui index, care este un index „text”. Numele indexului, des_text, a fost generat automat.

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

Acum, funcția find() a fost folosită pentru a efectua „căutarea text” pe colecție prin indexul „des_text”. Operatorul $search a fost utilizat pentru a căuta cuvântul „aliment” în înregistrările de colectare și pentru a afișa respectiva înregistrare.

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

Verificați indecșii:

Puteți verifica și enumera în jos toți indecșii aplicați ai diferitelor colecții din MongoDB. Pentru aceasta, utilizați metoda getIndexes() împreună cu numele unei colecții în ecranul shell MongoDB. Am folosit această comandă separat pentru colecțiile „Test” și „Dummy”. Aceasta afișează pe ecran toate informațiile necesare cu privire la indecșii încorporați și definiți de utilizator.

test> db.Test.getIndexes()

test> db.Dummy.getIndexes()

Indicii de eliminare:

Este timpul să ștergeți indecșii care au fost creați anterior pentru colecție folosind funcția dropIndex() împreună cu același nume de câmp la care a fost aplicat indexul. Interogarea de mai jos arată că indexul unic a fost eliminat.

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

În același mod, indicele compus poate fi scăzut.

test> db.Dummy.drop index({tip: 1 , voi: 1 })

Concluzie

Prin accelerarea preluării datelor din MongoDB, indexarea este esențială pentru îmbunătățirea eficienței interogărilor. Lipsit de indici, MongoDB trebuie să caute în întreaga colecție înregistrări care se potrivesc, ceea ce devine mai puțin eficient pe măsură ce dimensiunea setului crește. Capacitatea MongoDB de a descoperi rapid înregistrările potrivite utilizând structura bazei de date indexate accelerează procesarea interogărilor atunci când este utilizată indexarea adecvată.