In informatica , nei database , un indice è una struttura di dati utilizzata e mantenuta dal sistema di gestione del database (DBMS) per consentirgli di trovare rapidamente i dati. L'utilizzo di un indice semplifica e velocizza le operazioni di ricerca, ordinamento, join o aggregazione eseguite dal DBMS.
L' indice posizionato su una tabella consentirà al DBMS di accedere ai record molto rapidamente, a seconda del valore di uno o più campi .
Un indice è una struttura gestita automaticamente che semplifica l'individuazione dei record in un file. L'utilizzo degli indici si basa sulla seguente osservazione: per trovare un libro in una biblioteca, invece di esaminare ogni libro uno per uno (che corrisponde ad una ricerca sequenziale ), è più veloce consultare il catalogo dove sono classificati per argomento, autore e titolo. Ogni voce in un indice ha un valore recuperato dai dati e un puntatore alla sua posizione originale. Una registrazione può quindi essere facilmente trovata cercando la sua posizione nell'indice.
Un indice può essere ordinato, tritato, denso o sparso:
L'indice principale di una tabella è il primo indice utilizzato per individuare i record. Una tabella può contenere anche indici secondari oltre all'indice primario. Ogni tabella può avere uno o più indici. Un indice può provenire da un singolo campo o può combinare più campi.
Gli indici vengono utilizzati dal DBMS per molte operazioni. Gli indici semplificano l'ordinamento, la ricerca, il raggruppamento e l'unione. La struttura più comune dell'indice è il B-tree . Esistono altre strutture ma vengono utilizzate raramente: ISAM , tabelle hash o bitmap.
Per velocizzare le operazioni, gli alberi degli indici sono registrati in un blocco con un numero molto elevato di ramificazioni: I dischi rigidi, sui quali sono registrati gli indici, leggono i dati in blocchi di diversi kilobyte e il tempo necessario per leggere un blocco è solitamente molto meno del tempo necessario per individuarlo. Con questa costruzione, la ricerca di un record in un lotto di diversi milioni richiede quindi solo 2 o 3 operazioni.
Gli indici possono essere aggiunti da un comando SQL . L'esistenza degli indici è fondamentale per accelerare le operazioni di manipolazione dei dati. La principale causa di delusione è l'uso inadeguato degli indici. Il sistema di gestione del database (abbr. DBMS) non troverà gli indici necessari per eseguire in modo efficiente le operazioni richieste. Le ragioni di un uso inadeguato sono che la documentazione del DBMS relativa all'uso degli indici è spesso vaga e succinta e sottolinea i loro svantaggi piuttosto che i loro vantaggi.
Gli indici vengono utilizzati in particolare dal Query Optimizer :
Quando si inserisce o si aggiorna un record di database, si verifica un leggero degrado delle prestazioni: il DBMS deve infatti aggiornare gli indici in modo che continuino a riflettere lo stato dei record. Per questo motivo, durante la progettazione di un database, tenteremo di definire solo gli indici che verranno utilizzati dal sistema. Questi saranno inoltre ben individuati solo da un'analisi del sistema (ed in particolare dei meccanismi di interrogazione del database) in vista della sua ottimizzazione.
Altri tipi di strutture offrono funzionalità di indicizzazione:
Nel caso di un indice a più colonne, il DBMS può "decidere" di utilizzarlo parzialmente, nell'ordine delle colonne dell'indice. In altre parole, un indice sulle colonne (c1, c2, c3, c4) può essere utilizzato come indice (c1, c2, c3), (c1, c2) o (c1).