INDICIZZATO

La ricerca dei dati negli archivi è una delle operazioni più onerose, in termini di tempo di attesa per l'utente, quindi, è una delle attività da gestire con cautela.
I dati sono memorizzati nel disco nello stesso ordine in cui vengono inseriti. Anche se, dopo l'inserimento, è possibile ordinare le tabelle, l'ordine risulta sulla memoria RAM, non sul disco.
Un INDICE è una struttura ausiliaria che serve per fare le ricerche in modo più rapido, cosicché l'utente debba aspettare meno le risposte. Essendo una struttura, che deve essere aggiunta al database e memorizzata sul disco (struttura ausiliaria), ha lo svantaggio di incrementare la memoria totale dell'archivio e di appesantire l'inserimento dei dati.

ESEMPIO.
La figura 12.17 visualizza una tabella non ordinata, così come si trova nel disco.



FIG. 12.17


Si provi a cercare Bianchi Umberto di Treviso: si deve cercare il record partendo dalla prima riga e controllando una riga alla volta, finché non si trova quello giusto. Potrebbe anche succedere di non trovare il record, cosicché si perde tutto il tempo (controllo di tutte le righe) per avere una risposta negativa (le tabelle degli archivi contengono, di solito, molte più righe di quella della figura).
Questo sistema di ricerca è molto inefficiente, perché richiede di passare quasi tutte le righe della tabella, finchè non viene trovato il valore o non è terminata la tabella.
Utilizzando gli indici si crea una struttura "a parte", rispetto alla tabella, che tiene gli elementi in ordine. Il modo in cui viene gestita questa struttura va oltre gli scopi del manuale, per semplificare le cose, supponiamo che anche l'indice sia memorizzato su una tabella (se fosse veramente così non sarebbe molto efficiente). Questo significa che, per ogni indice, si deve creare e gestire una tabella in più (spazio su disco e spazio su RAM). La tabella dell'indice, a differenza della tabella di partenza, è sempre ordinata, per cui, ogni volta che si inserisce un nuovo record, questo deve essere aggiunto nella tabella e deve anche essere aggiunto nell'indice; aggiungere un elemento nell'indice è un po' più oneroso, in quanto la tabella deve essere riordinata.
La prima colonna della figura 12.17 rappresenta la posizione sull'hard disk (settore di memorizzazione, per ulteriori informazioni sui settori consultare il manuale sugli hard disk: www.manualipc.it).
Le figura 12.18 e 12.19 visualizzano gli indici costruiti sulla tabella 12.17, rispettivamente per i campi "Cognome" e " Città".



FIG. 12.18



FIG. 12.19


La ricerca sugli indici, essendo ordinati, è molto più rapida rispetto a quella sulla tabella: non si devono passare tutte le righe, ma si cerca direttamente il valore nella posizione in cui dovrebbe trovarsi. Per capire bene la differenza tra una ricerca su un indice e la stessa ricerca sulla tabella corrispondente, si pensi all'elenco telefonico. La ricerca di un numero sull'elenco, per come è strutturato, è molto simile a quella su un indice. La ricerca sulla tabella, invece, è simile a quella che si dovrebbe fare se l'elenco telefonico non fosse ordinato, ma i numeri fossero sistemati casualmente. Il paragone vale anche per il tempo impiegato a trovare i valori: nel primo caso si cerca direttamente in una posizione dell'elenco, nel secondo caso si deve partire del primo numero e leggere tutti i seguenti fino a quando non si trova quello cercato.
Non è corretto creare un indice per ogni campo, infatti, la struttura degli indici occupa memoria e rallenta l'inserimento dei record, quindi, si deve scegliere in quali campi creare la struttura. Di solito sono scelti i campi più importanti, intendendo quelli su cui si effettuano spesso le ricerche, per decidere se creare o meno l'indice su un campo si deve controllare l'analisi dei requisiti.
In Access si può scegliere tra 3 opzioni:

1. Non indicizzato: non viene creata la struttura;
2. Indicizzato con ripetizioni: il campo ha un indice e i valori della colonna possono essere ripetuti;
3. Indicizzato senza ripetizioni: il campo ha un indice, in più viene effettuato un controllo in modo da impedire valori ripetuti sulla colonna.

ESEMPIO. Indici.
Creare una nuova tabella e definire il campo "Codice", tipo di dati "Contatore". Definire il campo "Cognome", tipo di dati "Testo", indicizzato "Sì, duplicati ammessi", come visualizzato nella figura 12.20.



FIG. 12.20


Definire il campo "Nome", tipo di dati "Testo", indicizzato "Sì, duplicati non ammessi", figura 12.21.



FIG. 12.21


Definire il campo Codice come chiave primaria e salvare la tabella con il nome "TProva8". Passare in visualizzazione foglio dati e provare ad inserire valori. Tentando di inserire due volte lo stesso nome, viene visualizzato il messaggio di errore della figura 12.22, dovuto alla scelta "duplicati non ammessi".



FIG. 12.22