Newsgroup: it.comp.appl.access
Titolo: Lentezza query

Ciao a tutti!
Ho un problema con la query seguente:
SELECT
candidato.idcandidato, candidato.codicefiscale, candidato.cognome,
candidato.nome, nascita.datanascita,citta.nome, citta.provincia
FROM
candidato, nascita, residenza, domicilio, citta, titolostudio, conseguito,
impiegopassato, impiegocorrente, informatica, competenzainformatica, lingua,
competenzalinguistica
WHERE
( sesso LIKE  'M' AND statocivile LIKE 'Celibe/nubile' AND nascita.citta_cap
= '64100' AND nascita.datanascita LIKE  '1958-04-26' AND residenza.citta_cap
LIKE  '64026' AND domicilio.citta_cap LIKE  '61100'  AND titolostudio.Titolo
LIKE 'Laurea in Ing.Civile' AND conseguito.anno LIKE '1993' AND
conseguito.votazione LIKE '90' AND impiegopassato.mansione LIKE
'Responsabile sistema inf%' AND impiegocorrente.mansione LIKE 'Analista%'
AND informatica.descrizione LIKE 'Java%' AND competenzainformatica.livello
LIKE 'base' AND lingua.descrizione LIKE 'inglese' AND
competenzalinguistica.livelloscritto LIKE 'avanzato' AND
competenzalinguistica.livelloparlato LIKE 'intermedio' AND
competenzalinguistica.livellocompreso LIKE 'intermedio' AND
candidato.categoriaprotetta LIKE '0' AND candidato.mesidisoccupazione LIKE
'24' AND candidato.carichifamiglia LIKE '0' AND candidato.situazionemilitare
LIKE 'Assolto') AND (idcandidato = nascita.candidato_idcandidato AND
residenza.citta_cap = citta.cap AND residenza.candidato_idcandidato =
candidato.idcandidato AND
domicilio.candidato_idcandidato=candidato.idcandidato AND
conseguito.candidato_idcandidato=candidato.idcandidato AND
conseguito.titolostudio_idTitolo=titolostudio.idTitolo AND
impiegopassato.candidato_idcandidato=candidato.idcandidato AND
impiegocorrente.candidato_idcandidato=candidato.idcandidato AND
competenzainformatica.informatica_idinformatica=informatica.idinformatica
AND competenzainformatica.candidato_idcandidato=candidato.idcandidato AND
competenzalinguistica.lingua_idlingua=lingua.idlingua AND
competenzalinguistica.candidato_idcandidato=candidato.idcandidato)
In sostanza se al posto dei valori contenuti tra ' ' (apici) inserisco %,
per far in modo che venga ricercato qualsiasi valore, la durata della query
passa da 1 secondo a 97 secondi!!!
Capisco che % sia più lento di un match esatto, ma mi sembra esagerato.
Qualcuno sa darmi una qualunque spiegazione?
Grazie in anticipo.
Ciao,
Alfonso.

 Grazie in anticipo.
Questo avviene perchè Access sostituisce il "%" con tutte le combinazioni
possibili di caratteri.....
passi cosi da un algoritmo di ricerca di complessità lineare ad uno di
complessità esponenziale...non è simpatico (e si vede)...
Se vuoi un consiglio prova a riguardare la struttura del tuo database...
alcune informazioni mi sembrano derivabili e altre addirittura ridondanti...
Magari ristruttura meglio il tuo modello E-R...
...tutto ciò resta cmonque solo un consiglio....
c:\iao

Iceman ha scritto:


Sicuramente usare il like al posto dell'uguale quando cerchi un valore ben
definito i tempi si allungano.
A parte questo, questa query non restituirà mai nessun record, perchè
l'operatore like non supporta il '%' come carattere jolly. Devi usare like
'*'.
Namor
-- 
namor at inwind punto it
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it