Gli indici sono molto importanti in qualsiasi database e con MongoDB non è diverso. Con l'uso degli indici, l'esecuzione di query in MongoDB diventa più efficiente.
Se si dispone di una raccolta con migliaia di documenti senza indici e quindi si esegue una query per trovare determinati documenti, in tal caso MongoDB dovrebbe scansionare l'intera raccolta per trovare i documenti. Ma se avessi degli indici, MongoDB li userebbe per limitare il numero di documenti che dovevano essere cercati nella raccolta.
Gli indici sono set di dati speciali che memorizzano una parte parziale dei dati della raccolta. Poiché i dati sono parziali, diventa più facile leggere questi dati. Questo insieme parziale memorizza il valore di un campo specifico o un insieme di campi ordinati in base al valore del campo.
In questo tutorial imparerai:
- Comprensione dell'impatto degli indici
- Come creare indici: createIndex ()
- Come trovare gli indici: getindexes ()
- Come eliminare gli indici: dropindex ()
Comprensione dell'impatto degli indici
Ora anche se dall'introduzione abbiamo visto che gli indici vanno bene per le query, ma avere troppi indici può rallentare altre operazioni come l'operazione di inserimento, cancellazione e aggiornamento.
Se sono frequenti le operazioni di inserimento, eliminazione e aggiornamento dei documenti, gli indici dovrebbero cambiarlo spesso, il che sarebbe solo un sovraccarico per la raccolta.
L'esempio seguente mostra un esempio di quali valori di campo potrebbero costituire un indice in una raccolta. Un indice può essere basato su un solo campo nella raccolta oppure può essere basato su più campi nella raccolta.
Nell'esempio seguente, Employeeid "1" e EmployeeCode "AA" vengono utilizzati per indicizzare i documenti nella raccolta. Pertanto, quando viene eseguita una ricerca tramite query, questi indici verranno utilizzati per trovare in modo rapido ed efficiente i documenti richiesti nella raccolta.
Quindi, anche se la query di ricerca è basata su EmployeeCode "AA", quel documento verrà restituito.
Come creare indici: createIndex ()
La creazione di un indice in MongoDB viene eseguita utilizzando il metodo " createIndex ".
L'esempio seguente mostra come aggiungere index alla raccolta. Supponiamo di avere la nostra stessa raccolta Employee che ha i nomi di campo "Employeeid" e "EmployeeName".
db.Employee.createIndex({Employeeid:1})
Spiegazione del codice:
- Il metodo createIndex viene utilizzato per creare un indice basato su "Employeeid" del documento.
- Il parametro "1" indica che quando l'indice viene creato con i valori del campo "Employeeid", devono essere ordinati in ordine crescente. Si noti che questo è diverso dal campo _id (il campo id viene utilizzato per identificare in modo univoco ogni documento nella raccolta) che viene creato automaticamente nella raccolta da MongoDB. I documenti verranno ora ordinati in base al campo Employeeid e non al campo _id.
Se il comando viene eseguito correttamente, verrà visualizzato il seguente output:
Produzione:
- NumIndexesBefore: 1 indica il numero di valori di campo (i campi effettivi nella raccolta) presenti negli indici prima dell'esecuzione del comando. Ricorda che ogni raccolta ha il campo _id che conta anche come valore Field per l'indice. Poiché il campo indice _id fa parte della raccolta quando viene creato inizialmente, il valore di numIndexesBefore è 1.
- NumIndexesAfter: 2 indica il numero di valori di campo presenti negli indici dopo l'esecuzione del comando.
- Qui l'output "ok: 1" specifica che l'operazione è andata a buon fine e il nuovo indice viene aggiunto alla raccolta.
Il codice sopra mostra come creare un indice basato su un valore di campo, ma è anche possibile creare un indice basato su più valori di campo.
L'esempio seguente mostra come eseguire questa operazione;
db.Employee.createIndex({Employeeid:1, EmployeeName:1])
Spiegazione del codice:
- Il metodo createIndex ora prende in considerazione più valori Field che ora causeranno la creazione dell'indice in base a "Employeeid" e "EmployeeName". Employeeid: 1 e EmployeeName: 1 indica che l'indice deve essere creato su questi 2 valori di campo con: 1 che indica che dovrebbe essere in ordine crescente.
Come trovare gli indici: getindexes ()
La ricerca di un indice in MongoDB viene eseguita utilizzando il metodo "getIndexes" .
L'esempio seguente mostra come eseguire questa operazione;
db.Employee.getIndexes()
Spiegazione del codice:
- Il metodo getIndexes viene utilizzato per trovare tutti gli indici in una raccolta.
Se il comando viene eseguito correttamente, verrà visualizzato il seguente output:
Produzione:
- L'output restituisce un documento che mostra solo che ci sono 2 indici nella raccolta che è il campo _id e l'altro è il campo ID dipendente. Il: 1 indica che i valori dei campi nell'indice vengono creati in ordine crescente.
Come eliminare gli indici: dropindex ()
La rimozione di un indice in MongoDB viene eseguita utilizzando il metodo dropIndex.
L'esempio seguente mostra come eseguire questa operazione;
db.Employee.dropIndex(Employeeid:1)
Spiegazione del codice:
- Il metodo dropIndex accetta i valori di campo richiesti che devono essere rimossi dall'indice.
Se il comando viene eseguito correttamente, verrà visualizzato il seguente output:
Produzione:
- NIndexesWas: 3 indica il numero di valori di campo presenti negli indici prima dell'esecuzione del comando. Ricorda che ogni raccolta ha il campo _id che conta anche come valore Field per l'indice.
- L'output ok: 1 specifica che l'operazione è stata eseguita correttamente e il campo "Employeeid" viene rimosso dall'indice.
Per rimuovere tutti gli indici contemporaneamente nella raccolta, è possibile utilizzare il comando dropIndexes.
L'esempio seguente mostra come eseguire questa operazione.
db.Employee.dropIndex()
Spiegazione del codice:
- Il metodo dropIndexes eliminerà tutti gli indici tranne l'indice _id.
Se il comando viene eseguito correttamente, verrà visualizzato il seguente output:
Produzione:
- NIndexesWas: 2 indica il numero di valori di campo presenti negli indici prima dell'esecuzione del comando.
- Ricorda ancora che ogni raccolta ha il campo _id che conta anche come valore di campo per l'indice e che non verrà rimosso da MongoDB e questo è ciò che indica questo messaggio.
- L'output ok: 1 specifica che l'operazione è andata a buon fine.
Sommario
- La definizione degli indici è importante per una ricerca più rapida ed efficiente dei documenti in una raccolta.
- Gli indici possono essere creati utilizzando il metodo createIndex. Gli indici possono essere creati su un solo campo o su più valori di campo.
- Gli indici possono essere trovati utilizzando il metodo getIndexes.
- Gli indici possono essere rimossi utilizzando dropIndex per singoli indici o dropIndexes per eliminare tutti gli indici.