Newsgroup: it.comp.lang.visual-basic
Titolo: Database

Salve a tutti
Ho un database contenente 200.000 record. Il mio problema e' la ricerca
di un record troppo lenta.
Ho provato con il comando findfirst e con datasourse.
come posso fare per evere una risposta piu veloce mella ricerca di un
record?
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 record?
Beh avresti almeno potuto dire che database utilizzi.
Comunque la ricerca dei record come la fai?
Utilizzi indici?
    danilo

 Utilizzi indici?
 
No non uso indice per il motivo che non sono capare!!!
Qualche aiuto??


 Qualche aiuto??
Quanto ne vuoi, ma ci devi aiutare tu anche.
Non devi essere capace di usare un indice, l'indice deve esserci
e basta è il database che lo utilizza se è stato creato nel db.
Che database utilizzi?
Hai accesso al db come amministratore cioè hai la possibilità
            di creare un indice sui campi che utilizzi in query?
Su che campi fai la ricerca?
    danilo

 Su che campi fai la ricerca?
si tratta dell' archivio intero di un magazzino
i vari campi sono codice, descrizione, posizione, quantita, ecc
il campo piu importante e codice


 Il database lo creo con Visual data menager in Vb ed e in Access
Ok se il database l'hai creato tu allora puoi farci
quello che vuoi cerca nella guida di access qualcosa sugli indici.
                        danio

 Ho provato con il comando findfirst e con datasourse.
Findfirst?
Findfirst si usa quando hai aperto una tabella (o, più genericamente, un 
recordset) e vuoi posizionarti sul PRIMO record fra tutti.
Questo mi fa supporre che tu apra l'intera tabella dei prodotti... e 
questo in genere dovresti evitarlo.
Fai delle query mirate, nel senso che ti conviene - di volta in volta - 
lanciare una SELECT da VB per prendere dal database solo i record che ti 
interessano (i.e.: SELECT * FROM TuaTabella WHERE Codice='123' oppure 
SELECT * FROM TuaTabella WHERE Descrizione='Quello che ti serve'), fare 
quello che devi farci, e richiudere il recordset.
In questo modo credo che andrai molto più veloce che aprire l'intera 
tabella.

Io ho usato entrambi i modi e il secondo "select *from... " è nettamente
piu veloce del primo ma volevo sapere se c'è unnmodo ancora piu veloce
nel senso che non mi piace aspettare 5-6 secondi per ottenere la
risposta alla mia ricerca.


 risposta alla mia ricerca.
Ma la ricerca su che campo la fai? Sul codice o sulla descrizone?

> Ma la ricerca su che campo la fai? Sul codice o sulla descrizone?
Prevalentemente codice ma mi piacerebbe su entrambe. Nel caso in cui non
sia possibile solo codice


 sia possibile solo codice
Fai una cosa.
Apri il database Access e modifica la struttura della tabella su cui 
lavori: sia sul campo Codice che sul campo Descrizione, imposta 
Indicizzato a SI (Duplicati ammessi).
Chiudi il database e riprova a fare le query... e fammi sapere cosa 
succede in termini di velocità (ma presto, perchè fra un po' corro a 
casa a pappare :D)

 Indicizzato a SI (Duplicati ammessi).
Ma io non uso access uso il Visual data manager in Vb
e qui non c'è la possibilità di selezionare "indicizzato=si"
Ho provato ad inserire un indice sulla mia tabella selezionando il nome
del campo ma viene visualizzato un errore in cui dice " si è cercato di
duplicare i valori nell'indice, nella chiave primaria o nella relazione.
Modificare i dati nel campo o nei campi che contengono dati duplicati,
rimuovere l'indice o redifinire l'indice per consentire l'inserimento di
voci duplicate, qundi ritentare l'operazione"


 voci duplicate, qundi ritentare l'operazione"
E mi pare abbastanza chiaro: hai creato un indice univoco (il campo codice
dovrebbe esserlo, altrimenti potresti avere più articoli con lo stesso
codice, il che renderebbe difficile identificare con certezza un articolo)
ma per quell'indice ci sono più record con gli stessi valori.
Devi cercarti i valori duplicati e modificarli in modo che siano tutti
diversi, poi potrai applicare l'indice.
Ciao

 di raggruppamento e selezione...
Fammi sapere quando superi i 760.000 record per una tabella :)
Ciao

 Ciao
Oddio.. perchè? Mò mi metti in ansia...
Che per caso c'è qualche limite al numero di record che MySQL può 
supportare e di cui non mi sono mai accorto?
O è un limite oltre il quale le prestazioni crollano?
Oppure è un limite a cui sei giunto tu e vuoi vedere - per pura 
curiosità - se le prestazioni restano inalterate anche oltre?
Sinceramente spero per la terza... :\ Rispondimi ti prego!

 Sinceramente spero per la terza... :\ Rispondimi ti prego!
Sì, è solo una sfida :)
Io ho sott'occhio un DB con quel numero di record in una delle tabelle più
popolose, ma credo che altri di altri clienti superino anche questo numero.
Qualcun altro ha superato questo numero di record in una tabella (Access)?
Ciao

 Ciao
Comunque le importazioni che sto facendo mi fanno aumentare di parecchio 
i record di una certa tabella.
E quando arriverň ad un certo record voglio proprio vedere il 
comportamento su query mirate :) :) :)

Allora... sto lasciando il pc in ufficio a lavorare durante la notte.
Dovrei riuscire a fare una tabella di circa 1.518.099 record, domattina 
spero di darti buone notizie :)
-- 
Quando noi ignoranti eravamo di piů, tutto era piů bello (A. Celentano).
  ___   _   ___ _  _______   _______ ___
|   \ /_\ | _ \ |/ / _ ) \ / /_   _| __|
| |) / _ \|   / ' <| _ \\ V /  | | | _|
|___/_/ \_\_|_\_|\_\___/ |_|   |_| |___|

 record?
Su di una tabella con 1.000.000 di record, la ricerca di un record, con 
accesso diretto, dura meno di un secondo.
Forse hai dimenticato di indicizzare il campo della ricerca?
Saluti.
Michele

Qualcun altro ha superato questo numero di record in una tabella (Access)?
Io ho un Db in Access 97 perfettamente performante e funzionante con 700.000
record...
Il Db ha una sola tabella con due campi di cui uno è chiave.
Viene popolato tramite ADO (o DAO, non ricordo) una volta al giorno con più o
meno 1000 nuovi record da circa due anni. 
Se si usano chiavi primarie o indici qualunque DB esegue ricerche in tempi
logaritmici, per cui non ci sono problemi al crescere del numero dei record.
Il problema, casomai è che Access 97 ha il limite di circa 1GB per i file :)
termoPilucco

Sono riuscito ad ottenere una tabella con 1.176.967 record.
E' una sorta di anagrafica di Roma.
Per ora ho creato, oltre che all'indice primario ID autoincrementante, 
un indice sul CAP.
Ho paura a lanciare un add index sul nominativo o sull'indirizzo...
Comunque facendo una cosa tipo:
SELECT CAP, COUNT(CAP) AS NCount
FROM Roma
GROUP BY CAP
ottengo questo risultato:
+-------+--------+
| CAP   | NCount |
+-------+--------+
| 00010 |  17758 |
| 00011 |   1379 |
| 00012 |  18669 |
| 00013 |  10438 |
| 00014 |    224 |
| 00015 |   9724 |
| 00016 |    144 |
| 00017 |    511 |
| 00018 |   3191 |
| 00019 |  12816 |
| 00020 |   5498 |
| 00021 |    493 |
| 00022 |    408 |
| 00023 |    501 |
| 00024 |   1975 |
| 00025 |    441 |
| 00026 |    366 |
| 00027 |    443 |
| 00028 |   3049 |
| 00029 |   1028 |
| 00030 |  11402 |
| 00031 |   3217 |
| 00032 |   1583 |
| 00033 |   2632 |
| 00034 |   6247 |
| 00035 |   2022 |
| 00036 |   5064 |
| 00037 |   2757 |
| 00038 |   3309 |
| 00039 |   4040 |
| 00040 |  61499 |
| 00041 |   8651 |
| 00042 |  13488 |
| 00043 |  10803 |
| 00044 |   6551 |
| 00045 |   6565 |
| 00046 |   5292 |
| 00047 |   8058 |
| 00048 |  11340 |
| 00049 |  13983 |
| 00050 |   5596 |
| 00051 |   1347 |
| 00052 |   8890 |
| 00053 |  14340 |
| 00054 |  12570 |
| 00055 |   9235 |
| 00057 |    317 |
| 00058 |   5788 |
| 00059 |   1408 |
| 00060 |  18152 |
| 00061 |   4085 |
| 00062 |   4215 |
| 00063 |   2589 |
| 00064 |   1048 |
| 00065 |   2252 |
| 00066 |   2036 |
| 00067 |   2047 |
| 00068 |   2041 |
| 00069 |   1661 |
| 00100 |  77447 |
| 00119 |   1500 |
| 00121 |  24449 |
| 00122 |   2976 |
| 00123 |   5491 |
| 00124 |   7524 |
| 00125 |  11853 |
| 00126 |   5845 |
| 00127 |   1965 |
| 00128 |   9148 |
| 00131 |   4234 |
| 00132 |   8829 |
| 00133 |  23998 |
| 00134 |   2717 |
| 00135 |  18183 |
| 00136 |  14121 |
| 00137 |   9833 |
| 00138 |   7869 |
| 00139 |  22695 |
| 00141 |  17858 |
| 00142 |  11539 |
| 00143 |  12201 |
| 00144 |  12005 |
| 00145 |   5835 |
| 00146 |  15144 |
| 00147 |   6158 |
| 00148 |  11723 |
| 00149 |   9572 |
| 00151 |   8325 |
| 00152 |  14343 |
| 00153 |  10187 |
| 00154 |   8653 |
| 00155 |  15576 |
| 00156 |  12151 |
| 00157 |   5183 |
| 00158 |   4511 |
| 00159 |  11715 |
| 00161 |   5561 |
| 00162 |   7904 |
| 00163 |   5175 |
| 00164 |   4153 |
| 00165 |  12327 |
| 00166 |  18114 |
| 00167 |  12810 |
| 00168 |  15350 |
| 00169 |   7999 |
| 00171 |  11285 |
| 00172 |  14925 |
| 00173 |  10708 |
| 00174 |  11105 |
| 00175 |  14182 |
| 00176 |  15202 |
| 00177 |  16617 |
| 00178 |   7763 |
| 00179 |  11627 |
| 00181 |  10540 |
| 00182 |   8732 |
| 00183 |  10186 |
| 00184 |   6125 |
| 00185 |  10810 |
| 00186 |   8407 |
| 00187 |   4702 |
| 00188 |   8659 |
| 00189 |  11100 |
| 00191 |   6992 |
| 00192 |   5300 |
| 00193 |   2941 |
| 00194 |   3126 |
| 00195 |   8044 |
| 00196 |   5833 |
| 00197 |   6160 |
| 00198 |   9945 |
| 00199 |  16026 |
+-------+--------+
132 rows in set (0.89 sec)
Non male direi :)
Comunque dovrei anche fare delle prove di join: devo farmi un loop per 
estrarre casualmente (e senza ripetizioni) 50.000 persone, e fare un 
join sull'ID per settare un flag sulla tabella grande...
Ora non ho tempo, ma prestissimo lo farň ;)


 ha scritto

mi sembrava 2gb.
quanto alle tabelle, per test tempo fa ho passato con dao il contenuto di un
po' di cd in una struttura a 3 tabelle: disk, dir, file.
la file direi ha 4.464.250 righe: yes 4 milioni ecc. :)
il db e' sui 470 mb, con indici vari. access97. senza integrita'
referenziale (i legami pk/fk li gestivo a mano).
ora lo uso poco, e non lo aggiorno, ma quando apro il vb normalmente va.
ora l'ha aperto perfino access :)
ciao, j.

 Qualcun altro ha superato questo numero di record in una tabella (Access)?
Tabella Access con 1,3 milioni di record senza particolari problemi,
considerate che come già detto da qualcuno sugli indici la ricerca
è logartimica quindi 800.000 e 1,3 milioni non sono per la ricerca ordini
di grandezza differente.
Posso sapere perché poi avete paura di un milione di record su tabelle
Mysql? Io non l'ho mai usato ma ne decantano tanto la velocità e la
robustezza
che alcuni lo paragonano ad Oracle.
In Oracle ho utilizzato tabelle da più di 20 milioni di record e non ho mai
avuto problemi (certo se fai una ricerca non utilizzando gli indici è
un'altra cosa).

 Mysql?
Non è che io abbia paura di superare un certo limite, ma da come avevo 
interpretato la domanda di Zanna credevo ci fosse qualche limite in 
MySQL, o qualche bug...
Invece la sua era solo curiosità :)
-- 
Quando noi ignoranti eravamo di più, tutto era più bello (A. Celentano).


 mi sembrava 2gb.
Yes, una volta ho compattato un DB di 1.950 Mb.
Se fossi arrivato il giorno dopo sarebbe esploso tutto.
Ciao

 MySQL, o qualche bug...
Io parlavo di Access :)
Ciao

 Io parlavo di Access :)
Pardon :)
-- 
Quando noi ignoranti eravamo di piů, tutto era piů bello (A. Celentano).
