Newsgroup: it.comp.lang.visual-basic
Titolo: Indici di access

Mi è stato detto che di solito se un db diventa lento al crescere del numero
di record, e' un
problema di indici. E quindi devo verificare nel mio programma che tutte le
select li usino
correttamente, e quindi devo controllare che siano indicizzati i campi della
clausola where.
Ma che significa tutto questo? Che cosè un indice?
Grazie

 ha scritto

ci saranno spiegazioni piu' accurate, ma spero di non dire castronerie. nel
caso spero che qualcuno mi corregga.
un indice e' una serie ordinata di puntatori ai record di una tabella.
se inserisci schede (record) in una tabella di db, tendi a ritrovarle
nell'ordine in cui le hai messe, poniamo:
c
z
d
r
se indicizzi la tabella su uno o piu' campi, puoi chiedere al db di
mostrarti i record nell'ordine desiderato. nel caso qui su, potrebbe essere
l'ordine alfabetico (ascendente o discendente).
c'e' una differenza fondamentale: se cerchi "r" in una serie non ordinata,
devi spazzolarti tutte le schede per essere sicuro di trovarla.
se la tabella e' ordinata in senso alfabetico ascendente, fai una ricerca
mirata ("seek") delle schede con "r". se il db ti da', poniamo, "s". vuol
dire che di "r" non ce n'e'. e l'operazione e' infinitamente piu' veloce.
lo stesso se hai codici alfanumerici o numerici. un'anagrafica di persone
potresti per esempio indicizzarla sul codice fiscale, che si suppone sia
univoco (non ci dovrebbero essere due cf uguali).
in access si indicizza spesso su un campo contatore: il valore lo assegna
access a ogni nuova scheda aggiunta, e la ricerca su valori numerici e' se
non sbaglio molto piu' veloce.
svantaggi degli indici:
1. spreco di spazio disco. ma questo, di questi tempi, e' il meno.
2. piu' grave: non tutti i dbms e non tutti i linguaggi di interrogazione
supportano gli indici. sql, il linguaggio piu' universale, direi li supporti
pochino. la situazione varia parecchio da db a db utilizzato. access con sql
cerca di usare eventuali indici, per cui se chiedi
    select * from file where filename like 'win*'
il motore del db usa l'indice filename, se c'e', e punta direttamente ai
record che iniziano per win-, facendoti guadagnare un bel po' di tempo.
molte altre e piu' dettagliate notizie le puoi trovare credo in msdn o nella
guida di access. se vuoi un esempio abbastanza semplice e immediato di uso
degli indici:
www.comune.modena.it/cittadini/apal/tmp/vbtrix.zip
in vb5sp3. non e' un granche', ma un'idea te la puoi fare.
ciao, a.


[...]


 neanche in che successione il dbms collega le tabelle ?
ecco, questa e' una cosa che potrebbe essere interessante sapere. non
perche' pensi di essere piu' sveglio degli ellison's men, quanto perche' su
query piu' semplici una gestione manuale magari potrebbe anche dare
risultati migliori. ma suppongo che qualche possibilita' di intervento ci
sia. o no ?
ciao, a.

 sia. o no ?
Stiamo andando un po' oltre la mia conoscenza; comunque so per certo che
abilitando un certo switch in oracle puoi vedere tutte le ipotesi valutate
dall'optimizer con i costi associati e forse (e ripeto forse) puoi agire sui
costi per forzare certe ipotesi (un po' come si fa con i router).
altro non so...
Ciao
Alfonso Moscato