Newsgroup: it.comp.appl.access
Titolo: Velocizzare ricerca

Buon giorno a tutto il NG,
mi rivolgo nuovamente a voi per risolvere un problema che riguarda la possibilità di velocizzare le ricerche all’interno di una query che restituisce oltre 2.000.000 di record. Mi spiego meglio, al momento su una maschera ho una casella di testo non associata nella quale viene inserita la parola da ricercare ed una casella di riepilogo che mostra i risultati della ricerca. Quale “rudimentale” metodo di ricerca al momento utilizzo le seguenti istruzioni:
 
Dim strR As String
Dim strsql As String
 
strR = Me!txtRicerca.Text
strsql = "SELECT Matricola, Descrizione " & _
                "FROM [Elenco] " & _
                "WHERE (Descrizione Like " & Chr$(34) & "*" & _
                strR & "*" & Chr$(34) & ") "
Me!Elenco.RowSource = strsql
Me!Elenco.Requery
 
ma questa soluzione, anche in relazione all’elevatissimo numero di record su cui deve operare la ricerca, è lenta in maniera disarmante … sicuramente ci sarà una soluzione più performante … mi potete aiutare ?
Grazie a tutti per l’attenzione e buona prosecuzione di serata
 
Francesco

 Francesco
 
tralasciando il discorso su che utilità può avere una query che 
restituisce 2.000.000 record...
il BE è un mdb? è in rete?
se è un mdb le prestazioni saranno sempre pessime visto che cmq la query 
viene risolta dal client e non dal server. (se qualcuno non mi 
smentisce..sono 10 anni che uso sql server come BE)
 
 
ciao
BFS
 
 
 


Grazie innanzitutto dell'attenzione ... utilizzo la query perché va a raggrupparmi i dati che trae dalla tabella che contiene ben oltre 3.000.000 di inserimenti ... il programma è molto semplice e non è diviso in FE e BE ... alternative ?
Grazie ancora
Francesco


ma l'utente scorre poi la lista di 2.000.000 di record? che senso ha?
 
cmq di sicuro access come BE non è la scelta giusta per un numero così 
elevato di record.
 
ciao
BFS
 
 
 
 
 


... perdonami ... forse mi sono espresso male ... come ho scritto nel primo post, l'utente inserisce la chiave di ricerca nella casella di testo e poi il codice sottostante esegue la ricerca della parola all'interno della query ... spero di essere stato più chiaro.
Grazie, ciao
 
Francesco


allora il tuo codice va bene
è indicizzato il campo "descrizione" ?
cmq se il volume di record nelle tabelle è quello, access non va bene 
come BE
 
ciao
BFS
 
 
 
 


... si è indicizzato ... in effetti cercavo altre soluzioni perseguibili, se no credo che l'unica sia devolvere il FE a SQL ...
Grazie comunque e buona prosecuzione di serata,
 
Francesco


Tutto quello che dice BSF è sacrosanto. Troppi dati. Cmq tieni conto
che qualunque motore di database se metti un carattere jolly
all'inizio della ricerca (like *qualcosa*) nn può sfruttare gli indici
quindi scorre tutta la tabella. Su una mole di dati così rilevante è
impossibile avere prestazioni umane. Il mio consiglio (con jet) è di
specializzare la ricerca (fai scegliere all'utente 'comincia con' e
'contiene' per esempio), riduci la possibilità di usare il carattere
joilly all'inizio della stringa. Se passi a SQL server x quanto
migliori la situazione dubito che sarà performante come vuoi tu....per
questo tipo di ricerca c'è il full text che indicizza i campi dove
avvengono le ricerche in maniera particolare (non funziona su parti di
parole x farti un esempio). Devi fare un po' di prove, ma ti
STRAconsiglio di cambiare approccio.....


Buon giorno,
in effetti non avevo riflettutto sul problema del carattere jolly all'inizio ... seguirò senza dubbio il tuo consiglio, ora mi metto a fare delle prove e spero di trovare una soluzione "umana" ... grazie comunque per l'attenzione e buona prosecuzione di giornata
 
Francesco