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
Per vedere l'effetto degli indici sulla ricerca si devono inserire centinaia
di record e provare a fare la ricerca sulla stessa tabella, con e senza
gli indici.