Newsgroup: it.comp.lang.visual-basic
Titolo: Database di access e lentezza...

Ciao a tutti.
Mi scuso perchè probabilmente porrò una questione già spesso discussa su
questo ng, ma nonostante mi sia letto decine di post vecchi, non riesco a
risolvere il mio problema:
sto gestendo con visual basic un db di access di notevoli dimensioni.
Ho usato le combo normali perchè mi è parso di capire siano migliori in
velocità delle dbcombo, ho usato DAO e le query sono abbastanza
ottimizzate...(ho fatto SELECT * FROM tabella ecc ecc...) nonostante tutto
quando ricerco nel database il programma è lento (sfiora i 2 minuti!!! Ha 3
query da fare...).
Ho letto che è importante INDICIZZARE I CAMPI, ma non riesco a capire cosa
voglia dire!
Mi potete fare un esempio? Io ho messo per ogni tabella (sono 3 in tutto) un
campo con id numerico crescente con chiave primaria, è questo?
Come posso migliorare le prestazioni?
Grazie a tutti per l'attenzione,
saluti!
--
Francesco Musicman
-----------------------------------------------------------------
Contacts:
msn: 
fra_mu...@hotmail.com
icq: 86016267
mail: 
fra...@libero.it
---------------------------------------------------------------
- I won't give up 'til I've no more to give -
DT

mi viene in mente una cosa... un mio collega si lamentava della lentezza
della sua applicazione... il database access aveva superato i 1.3Gb di
dimensione su disco!!! E' bastato effettuare una semplice compattazione del
database per portarlo alla dimensione effettiva di poco piů di 20Mb... credo
che questo non sia il tuo problema ma tienilo comunque a mente! ;)
--
Max Etere
massimili...@programmando.org
http://www.programmando.org

 saluti!
indicizzare, normalmente lo fai a mano, in access. (puoi farlo anche via
codice dao o sql).
quando hai la tabella in visual struttura -> visualizza -> indici.
se nella tab hai specificato che un campo e' indicizzato, l'indice lo trovi
nella finestra relativa.
puoi migliorare in un'anagrafica, puoi p.e. creare un indice per cognome: in
questo caso, p.e., puoi in tabella dire per 'cognome' indicizzato=si'
duplicati=consentiti.
pero' avresti i record ordinati per cognome, ma a parita' di cognome +- a
caso.
quindi vai nella finestra indici, e sotto al campo cognome clicchi e dal
combo che appare scegli 'nome'.
a questo punto hai un indice cognome+nome, dove rossi andrea precede rossi
mario. il nome dell'indice lo puoi cambiare riscrivendolo: io p.e. userei
cognome_nome, autore_titolo, titolo_autore. ognuno ha i suoi gusti.
con le query, in access, questo puo' semplificare le cose. se fai una query
    where cognome like 'rossi*'
se c'e' un indice il risultato dovrebbe essere piu' rapido. 'dovrebbe'
perche' a volte ho riscontrato il contrario.
sulla velocita': cosa vuol dire 'lento' ? due minuti-- per quanti record ?
io avevo tempi di 1'30" per query tipo where filename like 'win*' su 4 mln
di record, su un pc normalissimo, e non mi sembrava di dovermi lamentare. se
ci fosse voluto un minuto e mezzo per 300 record, allora si'.
poi: "select *" in tabelle complesse puo' essere pericoloso. se la tabella
'file' ha 50 campi e a te servono solo filename, filedate, filesize,
chiedere tutti i campi vuol dire rallentare senz'altro.
per cose piu' specifiche, magari posta dati piu' precisi: struttura
dell'archivio, # record, query che usi, ecc., compresa la storia dei combo
che non ho capito bene cosa c'entri con le query.
hth, j.
--
www.sundaysw.com