Come migliorare le query con l'indicizzazione MongoDB

Come Migliorare Le Query Con L Indicizzazione Mongodb



Migliorare la velocità delle query è essenziale per MongoDB e tutti gli altri sistemi di database. Costruendo strutture dati che aiutano MongoDB a identificare i record più rapidamente, l'indicizzazione è un potente approccio per accelerare e ottimizzare le ricerche. Gli indici includono copie di alcuni dati contenuti nei record per rendere le indagini più efficaci. Ciò semplifica lo sforzo necessario per rispondere alle richieste in MongoDB. In questa guida discuteremo dell'uso degli indici con l'aiuto di diversi tipi di indicizzazione.

Crea raccolta

Prima di utilizzare gli indici, dobbiamo creare una nuova raccolta nel nostro MongoDB. Ne abbiamo già creato uno e inserito 10 documenti, denominati “Dummy”. La funzione find() MongoDB visualizza tutti i record della raccolta 'Dummy' nella schermata della shell MongoDB di seguito.

prova> db.Dummy.find()







Scegli Tipo di indicizzazione

Prima di stabilire un indice, è necessario innanzitutto determinare le colonne che verranno comunemente utilizzate nei criteri di query. Gli indici funzionano bene su colonne che vengono frequentemente filtrate, ordinate o cercate. I campi con una cardinalità elevata (molti valori diversi) sono spesso eccellenti opzioni di indicizzazione. Di seguito sono riportati alcuni esempi di codice per diversi tipi di indice.



Esempio 01: Indice di campo singolo

È probabilmente il tipo di indice più fondamentale, che indicizza una singola colonna per migliorare la velocità delle query su quella colonna. Questo tipo di indice viene utilizzato per le query in cui si utilizza un singolo campo chiave per interrogare i record della raccolta. Supponiamo di utilizzare il campo 'tipo' per interrogare i record della raccolta 'Dummy' all'interno della funzione di ricerca come di seguito. Questo comando esaminerebbe l'intera raccolta, il che potrebbe richiedere molto tempo per l'elaborazione di raccolte di grandi dimensioni. Pertanto, dobbiamo ottimizzare le prestazioni di questa query.



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





I record della raccolta Dummy di cui sopra sono stati trovati utilizzando il campo “tipo” cioè contenenti una condizione. Pertanto, l'indice a chiave singola può essere utilizzato qui per ottimizzare la query di ricerca. Quindi, utilizzeremo la funzione createIndex() di MongoDB per creare un indice sul campo 'tipo' della raccolta 'Dummy'. L'illustrazione dell'utilizzo di questa query mostra la creazione riuscita di un indice a chiave singola denominato 'type_1' sulla shell.

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

Usiamo la query find() una volta ottenuta utilizzando il campo 'tipo'. Ora l'operazione sarà significativamente più veloce rispetto alla funzione find() utilizzata in precedenza poiché l'indice è attivo perché MongoDB può utilizzare l'indice per recuperare rapidamente i record con la qualifica lavorativa richiesta.



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

Esempio 02: Indice composto

In determinate circostanze potremmo voler cercare elementi in base a vari criteri. L'implementazione di un indice composto per questi campi può contribuire a migliorare le prestazioni delle query. Supponiamo, questa volta, che tu voglia effettuare una ricerca dalla raccolta 'Dummy' utilizzando più campi contenenti diverse condizioni di ricerca mentre viene visualizzata la query. Questa query ha cercato i record della raccolta in cui il campo 'tipo' è impostato su 'emp' e il campo 'sal' è maggiore di 350.

L'operatore logico $gte è stato utilizzato per applicare la condizione al campo “sal”. Dopo aver effettuato la ricerca nell'intera raccolta, composta da 10 record, sono stati restituiti un totale di due record.

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

Creiamo un indice composto per la query di cui sopra. Questo indice composto ha campi 'tipo' e 'sal'. I numeri “1” e “-1” rappresentano rispettivamente l'ordine ascendente e discendente per i campi “tipo” e “sal”. La sequenza delle colonne dell'indice composto è importante e dovrebbe corrispondere ai modelli di query. MongoDB ha assegnato il nome 'type_1_sal_-1' a questo indice composto come visualizzato.

test> db.Dummy.createIndex({ tipo: 1 , Volere:- 1 })

Dopo aver utilizzato la stessa query find() per cercare record con il valore del campo “type” come “emp” e il valore del campo “sal” maggiore di uguale a 350, abbiamo ottenuto lo stesso output con un leggero cambiamento nell'ordine rispetto al risultato della query precedente. Il record di valore più grande per il campo “sal” è ora al primo posto, mentre il più piccolo è al minimo secondo il “-1” impostato per il campo “sal” nell’indice composto sopra.

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

Esempio 03: Indice di testo

A volte, potresti riscontrare una situazione in cui dovresti gestire un set di dati di grandi dimensioni, come grandi descrizioni di prodotti, ingredienti, ecc. Un indice di testo potrebbe essere utile per eseguire ricerche full-text su un campo di testo di grandi dimensioni. Ad esempio, abbiamo creato una nuova raccolta denominata 'Test' all'interno del nostro database di test. Inserito un totale di 6 record in questa raccolta utilizzando la funzione insertMany() secondo la query find() di seguito.

test> db.Test.insertMany([

{nome: 'Ana' , delle: 'Vive a Londra ed è una brava insegnante' },

{nome: 'Roberto' , delle: 'È un giocatore di football fantastico' },

{nome: 'da' , delle: 'Potrebbe essere in viaggio a Dubai' },

{nome: 'Giacobbe' , delle: 'È strabiliante e ricco.' },

{nome: 'Cillian' , delle: 'Un super inizio cinematografico è diventato famoso in pochi secondi' },

{nome: 'Ken' , delle: 'Amante del cibo. Può mangiare anche te.' }

])

Ora creeremo un indice di testo sul campo “Des” di questa raccolta, utilizzando la funzione createIndex() di MongoDB. La parola chiave 'testo' nel valore del campo visualizza il tipo di indice, che è un indice 'testo'. Il nome dell'indice, des_text, è stato generato automaticamente.

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

Ora, la funzione find() è stata utilizzata per eseguire la “ricerca di testo” sulla raccolta tramite l'indice “des_text”. L'operatore $search è stato utilizzato per cercare la parola “cibo” nei record della raccolta e visualizzare quel particolare record.

test> db.Test.find({ $testo: { $ricerca: 'cibo' }});

Verifica indici:

Puoi controllare ed elencare tutti gli indici applicati di diverse raccolte nel tuo MongoDB. Per questo, utilizza il metodo getIndexes() insieme al nome di una raccolta nella schermata della shell MongoDB. Abbiamo utilizzato questo comando separatamente per le raccolte 'Test' e 'Dummy'. Questo mostra tutte le informazioni necessarie riguardanti gli indici integrati e definiti dall'utente sullo schermo.

test> db.Test.getIndexes()

prova> db.Dummy.getIndexes()

Rilascia indici:

È ora di eliminare gli indici precedentemente creati per la raccolta utilizzando la funzione dropIndex() insieme allo stesso nome di campo a cui è stato applicato l'indice. La query seguente mostra che il singolo indice è stato rimosso.

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

Allo stesso modo, l’indice composto può essere eliminato.

test> db.Dummy.drop indice({tipo: 1 , Volere: 1 })

Conclusione

Accelerando il recupero dei dati da MongoDB, l'indicizzazione è essenziale per migliorare l'efficienza delle query. In mancanza di indici, MongoDB deve cercare nell’intera raccolta i record corrispondenti, il che diventa meno efficace all’aumentare della dimensione del set. La capacità di MongoDB di scoprire rapidamente i record giusti utilizzando la struttura del database dell'indice accelera l'elaborazione delle query quando viene utilizzata l'indicizzazione adeguata.