indici

Indici: come vengono utilizzati nei Database

Apprezzi in particolar modo leggere libri? Se la risposta è sì, non ti sarà difficile capire come funzionano gli indici di un database. Sai che ogni libro, romanzo o saggio, ha un indice all’inizio o alla fine, in cui puoi trovare i titoli dei capitoli e anche le pagine in cui iniziano.  L’indice ti aiuta a cercare il capitolo che ti interessa senza dover sfogliare tutto il libro. Se per esempio stai leggendo un classico come Io, robot di I. Asimov, e cerchi un determinato racconto, basta cercare nell’indice la pagina che indica quel racconto. Un database è come una grande libreria piena zeppa di libri, solo che al posto di avere storie conserva dati. Dati indicizzati.

Rappresenta una comodità assoluta per chi naviga e progetta database. Come vengono utilizzati gli indici? Oggi lo scoprirai leggendo l’articolo. Buona lettura!

 

Gli indici sono una scorciatoia nell’oceano di informazioni

I dati sono organizzati in tabelle, che sono come dei fogli digitali con delle righe e delle colonne, in maniera analoga a un foglio di calcolo excel, per intenderci subito. Ogni riga è un record, che contiene le informazioni su una persona, un animale, un oggetto o qualunque altra cosa. Puoi usare una tecnica mnemonica per cementificare il termine:

record → ricordo.

Ogni colonna è un campo, che indica una caratteristica del record. Qui si entra nei dettagli delle informazioni su una determina cosa. Ogni colonna è un campo che rappresenta una caratteristica specifica. Per esempio, una tabella degli studenti potrebbe avere i campi nome, cognome, età e classe. Se per esempio selezioniamo il campo “nome” della tabella ‘studenti’, possiamo vedere una sfilza di nomi, scritti in ogni riga (record) all’interno del campo ‘nome’. Facciamo un esempio pratico.

Questa tabella ha in tutto cinque record: ogni record è una riga che contiene le informazioni su uno studente. Per esempio, il primo record è (‘Maria’, ‘Rossi’, 10, ‘5A’), che significa che c’è uno studente di nome Maria Rossi che ha 10 anni e frequenta la classe 5A.

Ecco come si presenta la tabella STUDENTI:

nome cognome età classe
Maria Rossi 10 5A
Franco Verdi 11 5B
Marco Bianchi 10 5A
Sara Neri 10 5C
Giulia Gialli 11 5B

Notare appunto come i campi suddividano i record in sezioni specifiche. Senza l’ausilio di campi, non potremmo avere parametri di riferimento ben definiti. Può essere che vuoi cercare solo i cognomi degli studenti presenti nel database o altro.

La ricerca in un database

Poniamo caso tu voglia fare una ricerca in un database. Come funziona? Ovviamente quando vuoi fare una ricerca, devi fare una domanda al computer. La richiesta prende il nome di query. Per esempio, se vuoi sapere quanti studenti hanno 10 anni, devi fare una query come questa:

SELECT * FROM studenti WHERE età = 10;

Cosa dice questa query a te? Innanzitutto dice al server di selezionare tutti i record dalla tabella studenti (select from studenti), per poi considerare un singolo attributo, l’età di 10 anni. Quindi il database selezionerà per te tutti gli studenti di 10 anni. In sostanza il computer ti restituisce i record che corrispondono alla tua query, cioè, lo ribadiamo ancora una volta, la tua richiesta specifica.

Senza la presenza di indici, una ricerca così capillare nel database sarebbe impossibile da effettuare. Se la tabella non avesse indici, il computer sarebbe costretto a leggere tutti i record uno per uno, per poi controllare se il campo età è uguale a 10. Questo processo può essere molto lento se la tabella ha una marea di record. Perciò gli indici salvano tempo prezioso. Come menzionato prima, gli indici sono come gli indici dei libri, ma per le tabelle. Ti aiutano a cercare i dati più velocemente, evitando di leggere tutta la tabella. Con gli indici, il computer può ridurre l’insieme dei record da leggere per completare la query. Uno svantaggio degli indici è che potrebbero occupare uno spazio in memoria sul server.

Ma come si crea un indice?

 

Creazione di un indice

Basta l’ausilio di un semplice comando: ALTER TABLE. Tale istruzione consente di modificare una tabella esistente in diverse maniere. Questo comando ti permette di fare diverse cose sulla tabella. Per esempio, puoi:

  • Aggiungere un nuovo campo alla tabella studenti con ADD COLUMN. Devi dire come si chiama il campo (‘altezza’, ‘gruppo sanguigno’ e via dicendo), che tipo di dati contiene e, se sono dati di tipo Testo o Binario, quanto spazio possono occupare.
  • Cambiare il tipo di dati di un campo già esistente con ALTER COLUMN. Devi dire come si chiama il campo, che tipo di dati vuoi mettere al posto di quelli vecchi e quanto spazio possono occupare.
  • Aggiungere un indice che coinvolge più campi con ADD CONSTRAINT.
  • Eliminare un campo con DROP COLUMN. Devi dire solo come si chiama il campo.
  • Eliminare un indice che coinvolge più campi con DROP CONSTRAINT. Devi semplicemente dire solo come si chiama l’indice dopo la parola CONSTRAINT.

Gli indici rendono le query più veloci perché il computer deve leggere meno dati. Ma hanno anche degli svantaggi: rendono più lente le operazioni di inserimento e modifica dei dati, perché il computer deve aggiornare anche gli indici; e occupano più spazio nella memoria del computer. Per questo motivo, non conviene creare indici su tutti i campi di una tabella, ma solo su quelli che usi spesso nelle query. La scelta degli indici dipende da quello che vuoi fare con il database e quali sono le domande più frequenti che poni al computer.

 

Tipologia di indici

Già, non tutti gli indici sono uguali, proprio come gli esseri umani! Esistono diversi tipi di indici in SQL, che si adattano a diverse esigenze e situazioni. Infatti i database SQL sono perfetti per dettare ordine. Vediamo quali tipologie esistono:

  • Primary key: senza alcun dubbio è l’indice più importante di una tabella, perché serve a identificare in modo univoco ogni record. In sostanza è associato alla chiave primaria della tabella, ovvero il campo o l’insieme di campi che non possono avere valori duplicati o nulli. Spesso si usa un campo numerico con la direttiva auto_increment per creare una primary key, così ogni record ha un numero progressivo che lo distingue dagli altri (es. ID).
  • Unique key: questo è un indice aggiuntivo che si può creare su uno o più campi della tabella che vogliamo rendere unici, ovvero senza valori duplicati. A differenza della primary key, però, questi campi possono avere valori nulli. Per esempio, se vogliamo che ogni record abbia una email diversa dagli altri, possiamo creare un unique key sul campo email.
  • Index: il più generico e flessibile che si può creare su uno o più campi della tabella. Al contrario degli altri tipi di indici, questi campi possono avere valori duplicati e nulli. Questa tipologia di indice serve a velocizzare le ricerche su campi che usiamo spesso nelle nostre query. Tipo, se vogliamo cercare i record in base al nome o alla data di nascita, possiamo creare un index su questi campi.
  • Full Text: infine abbiamo un tipo di indice specifico che si usa per le ricerche delle parole all’interno dei testi. Si può creare solo su campi di tipo testo e serve a trovare i record che contengono una parola o una frase nel campo indicizzato. Per dire, se vogliamo cercare i record che hanno la parola “gatto” nel campo descrizione, possiamo usare un full text index su questo campo.

Quindi esistono diversi tipi di indice proprio per venire incontro alle singole esigenze.

 

Trucchi e consigli utili per utilizzare al meglio gli indici

Esistono alcuni trucchi che ti consentono di non rallentare il server e le opzioni di inserimento. Certi elementi occupano spazio inutile nella memoria.

Il primo consiglio che ti vogliamo dare è quello di analizzare il tuo carico di lavoro e le tue query prima di creare un indice.

In secondo  luogo, non creare troppi indici per tabella. In generale non superare mai i 7 indici per tabella, altrimenti sovraccarichi di informazioni il database.

Inoltre, non creare indici su campi con valori poco definiti, come lo stato civile oppure il sesso: questi indici infatti hanno poca selettività e non aiutano a ridurre l’insieme dei record da leggere.

Ti consigliamo caldamente di usare indici full text per le ricerche delle parole all’interno dei testi, giacché gli indici su campi di testo occupano molto spazio e sono altresì inefficienti.

Non usare il simbolo * per selezionare tutti i campi di una tabella: questo può causare problemi di performance e di manutenzione se la tabella cambia nel tempo.

Infine, non ignorare la manutenzione degli indici, potrebbe essere un problema nel tempo. Non a caso gli indici possono subire fenomeni di frammentazione e obsolescenza, con la conseguenza di essere meno efficaci.

Gli indici sono un salva-tempo incredibile per chi si occupa di gestire database. In questa breve guida abbiamo cercato di spiegarti al meglio come vengono utilizzati all’interno dei database. Se ti è piaciuto questo articolo, lo staff di Inline Style ti invita a condividere il sapere tecnologico. Ci aiuti a crescere e a fare informazione.

Grazie e alla prossima!

COMMENTI