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