Com millorar les consultes amb la indexació de MongoDB

Com Millorar Les Consultes Amb La Indexacio De Mongodb



Millorar la velocitat de les consultes és essencial per a MongoDB i tots els altres sistemes de bases de dades. En crear estructures de dades que ajudin MongoDB a identificar els registres més ràpidament, la indexació és un enfocament potent per accelerar i optimitzar les cerques. Els índexs inclouen còpies d'algunes de les dades dels registres per fer que les consultes siguin més efectives. Això racionalitza l'esforç que suposa respondre a les sol·licituds a MongoDB. En aquesta guia, parlarem de l'ús dels índexs amb l'ajuda de diferents tipus d'indexació.

Crea col·lecció

Abans d'utilitzar índexs, hem de crear una nova col·lecció al nostre MongoDB. Ja n'hem creat un i hem inserit 10 documents, anomenats 'Dummy'. La funció find() MongoDB mostra tots els registres de la col·lecció 'Dummy' a la pantalla de l'intèrpret d'ordres de MongoDB a continuació.

prova> db.Dummy.find()







Trieu el tipus d'indexació

Abans d'establir un índex, primer heu de determinar les columnes que s'utilitzaran habitualment en els criteris de consulta. Els índexs funcionen bé a les columnes que es filtren, s'ordenen o es cerquen amb freqüència. Els camps amb una cardinalitat gran (molts valors diferents) solen ser excel·lents opcions d'indexació. Aquests són alguns exemples de codi per a diferents tipus d'índex.



Exemple 01: Índex de camp únic

Probablement és el tipus d'índex més fonamental, que indexa una sola columna per millorar la velocitat de consulta d'aquesta columna. Aquest tipus d'índex s'utilitza per a consultes en què utilitzeu un sol camp de clau per consultar els registres de la col·lecció. Suposem que utilitzeu el camp 'tipus' per consultar els registres de la col·lecció 'Dummy' dins de la funció de cerca com a continuació. Aquesta ordre examinaria tota la col·lecció, cosa que podria trigar molt a processar col·leccions enormes. Per tant, hem d'optimitzar el rendiment d'aquesta consulta.



prova> db.Dummy.find({tipus: 'emp' })





Els registres de la col·lecció Dummy anterior s'han trobat utilitzant el camp 'tipus', és a dir, que contenen una condició. Per tant, l'índex d'una sola clau es pot utilitzar aquí per optimitzar la consulta de cerca. Per tant, utilitzarem la funció createIndex() de MongoDB per crear un índex al camp 'tipus' de la col·lecció 'Dummy'. La il·lustració de l'ús d'aquesta consulta mostra la creació correcta d'un índex d'una sola clau anomenat 'tipus_1' al shell.

prova> db.Dummy.createIndex({ tipus: 1 })

Utilitzem la consulta find() un cop s'utilitzi el camp 'tipus'. L'operació serà significativament més ràpida ara que la funció find() utilitzada anteriorment, ja que l'índex està al seu lloc perquè MongoDB pot utilitzar l'índex per recuperar ràpidament els registres amb el títol de feina sol·licitat.



prova> db.Dummy.find({tipus: 'emp' })

Exemple 02: índex compost

És possible que vulguem buscar articles basats en diversos criteris en determinades circumstàncies. La implementació d'un índex compost per a aquests camps pot ajudar a millorar el rendiment de la consulta. Suposem que, aquesta vegada, voleu cercar des de la col·lecció 'Fictici' mitjançant diversos camps que contenen diferents condicions de cerca tal com es mostra la consulta. Aquesta consulta ha estat cercant registres de la col·lecció on el camp 'tipus' està definit com a 'emp' i el camp 'sal' és superior a 350.

S'ha utilitzat l'operador lògic $gte per aplicar la condició al camp 'sal'. Es van retornar un total de dos registres després de cercar per tota la col·lecció, que consta de 10 registres.

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

Creem un índex compost per a la consulta esmentada anteriorment. Aquest índex compost té camps 'tipus' i 'sal'. Els números '1' i '-1' representen l'ordre ascendent i descendent, respectivament, per als camps 'tipus' i 'sal'. La seqüència de les columnes de l'índex compost és important i hauria de correspondre als patrons de consulta. El MongoDB ha donat el nom 'type_1_sal_-1' a aquest índex compost tal com es mostra.

prova> db.Dummy.createIndex({ tipus: 1 , voluntat:- 1 })

Després d'utilitzar la mateixa consulta find() per cercar registres amb el valor del camp 'tipus' com a 'emp' i el valor del camp 'sal' superior a 350, hem obtingut la mateixa sortida amb un lleuger canvi en l'ordre. en comparació amb el resultat de la consulta anterior. El registre de valor més gran per al camp 'sal' es troba ara al primer lloc, mentre que el més petit es troba al més baix segons el '-1' establert per al camp 'sal' a l'índex compost anterior.

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

Exemple 03: Índex de text

De vegades, és possible que us trobeu amb una situació en què hauríeu de tractar amb un conjunt de dades gran, com ara descripcions grans de productes, ingredients, etc. Un índex de text pot ser útil per fer cerques de text complet en un camp de text gran. Per exemple, hem creat una nova col·lecció anomenada 'Prova' a la nostra base de dades de proves. S'han inserit un total de 6 registres en aquesta col·lecció mitjançant la funció insertMany() segons la consulta find() següent.

prova> db.Test.insertMany([

{nom: 'Ana' , del: 'Viu a Londres i és una bona mestra' },

{nom: 'Robert' , del: 'És un futbolista fantàstic' },

{nom: 'de' , del: 'Pot estar viatjant Dubai' },

{nom: 'Jacob' , del: 'És al·lucinant i ric'. },

{nom: 'Cillian' , del: 'Un súper inici de pel·lícula acaba de tenir fama en pocs segons' },

{nom: 'Ken' , del: 'Amant del menjar. Ella també pot menjar-te.' }

])

Ara, crearem un índex de text al camp 'Des' d'aquesta col·lecció, utilitzant la funció createIndex() de MongoDB. La paraula clau 'text' al valor del camp mostra el tipus d'índex, que és un índex de 'text'. El nom de l'índex, des_text, s'ha generat automàticament.

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

Ara, la funció find() s'ha utilitzat per realitzar la 'cerca de text' a la col·lecció mitjançant l'índex 'des_text'. L'operador $search es va utilitzar per cercar la paraula 'menjar' als registres de la col·lecció i mostrar aquest registre en particular.

prova> db.Test.find({ $text: { $cerca: 'menjar' }});

Verifica els índexs:

Podeu comprovar i llistar tots els índexs aplicats de diferents col·leccions al vostre MongoDB. Per a això, utilitzeu el mètode getIndexes() juntament amb el nom d'una col·lecció a la pantalla de l'intèrpret d'ordres de MongoDB. Hem utilitzat aquesta ordre per separat per a les col·leccions 'Test' i 'Dummy'. Això mostra tota la informació necessària sobre els índexs integrats i definits per l'usuari a la pantalla.

prova> db.Test.getIndexes()

prova> db.Dummy.getIndexes()

Índexs de baixa:

És hora d'eliminar els índexs que es van crear anteriorment per a la col·lecció mitjançant la funció dropIndex() juntament amb el mateix nom de camp al qual s'havia aplicat l'índex. La consulta següent mostra que l'índex únic s'ha eliminat.

prova> db.Dummy.dropIndex({tipus: 1 })

De la mateixa manera, es pot baixar l'índex compost.

prova> índex db.Dummy.drop ({tipus: 1 , voluntat: 1 })

Conclusió

En accelerar la recuperació de dades de MongoDB, la indexació és essencial per millorar l'eficiència de les consultes. A falta d'índexs, MongoDB ha de cercar en tota la col·lecció registres coincidents, cosa que es fa menys efectiu a mesura que augmenta la mida del conjunt. La capacitat de MongoDB per descobrir ràpidament els registres adequats utilitzant l'estructura de la base de dades d'índex accelera el processament de les consultes quan s'utilitza la indexació adequada.