 |
AppletTalk.com Java discussions newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Scorpio Guest
|
Posted: Mon May 30, 2005 8:55 am Post subject: Tempi di esecuzione query. |
|
|
Salve a tutti,
avrei una domanda da porvi...
Ho scritto alcune classi Java che eseguono query su un certo numero di
tabelle, al fine di fornire ad un utente un sistema di ricerca di coppie
codice-descrizione. Il caso d'uso tipico prevede che l'utente inserisca una
porzione della descrizione e che il sottosistema ritorni, paginandoli, un
elenco di codici la cui descrizione corrisponde al criterio desiderato.
Il mio dubbio riguarda la velocità di esecuzione, perchè i tempi di risposta
non mi soddisfano. La tabella contiene oltre mezzo milione di record, e
ciascun record è composto da oltre 100 colonne. Ovviamente, nella query di
ricerca, seleziono solo quelle che mi interessano. Vorrei sapere da chi ha
avuto a che fare con tabelle di queste dimensioni quali possono essere dei
tempi di risposta "ragionevoli", considerando che la ricerca avviene via
web.
Grazie in anticipo a tutti,
Scorpio.
|
|
| Back to top |
|
 |
Francesco Galli Guest
|
Posted: Mon May 30, 2005 9:03 am Post subject: Re: Tempi di esecuzione query. |
|
|
Il tempo "ragionevole" dipende molto dall'utente. Se e' un applicativo che
viene utilizzato "alla desktop", quindi un vero e proprio applicatiov web
utilizzato in LAN piuttosto che via web allora ti direi che due-tre secondi,
tra la submit e la presentazione dei risultati, sono il tempo "limite" che
la mia esperienza mi suggerisce. E soprattutto il tempo limite prima che
l'utente *riclicchi* il fottuto pulsantino :)
Ci dovrebbero essere degli studi in proposito, comunque.
--
---
Francesco Galli / Cinghiale Mannaro
Personal: http://cinghialemannaro.splinder.com
TMS project: http://tms.inera.it
|
|
| Back to top |
|
 |
Scorpio Guest
|
Posted: Mon May 30, 2005 9:25 am Post subject: Re: Tempi di esecuzione query. |
|
|
"Francesco Galli" <cinghialemannaroinenglish (AT) interfree (DOT) it> ha scritto nel
messaggio news:429ad6d8$1_1 (AT) x-privat (DOT) org...
| Quote: | Il tempo "ragionevole" dipende molto dall'utente. Se e' un applicativo che
viene utilizzato "alla desktop", quindi un vero e proprio applicatiov web
utilizzato in LAN piuttosto che via web allora ti direi che due-tre
secondi,
tra la submit e la presentazione dei risultati, sono il tempo "limite" che
la mia esperienza mi suggerisce.
|
Ti ringrazio per la risposta. Il fatto è che, per alcune tipologie di
ricerca, il tempo di risposta è intorno ai 20 secondi. Il che è davvero
tanto,
ma purtroppo non ho la più pallida idea di come si possa ulteriormente
ottimizzare una query del tipo "select codice, descrizione from tabella
where
descrizione like %_parametro_%" limitandosi, peraltro, a caricare i primi
100 record....
Intanto, grazie per la risposta !
Scorpio.
|
|
| Back to top |
|
 |
Francesco Galli Guest
|
Posted: Mon May 30, 2005 9:31 am Post subject: Re: Tempi di esecuzione query. |
|
|
Prova su it.comp.software.database... comunque dipende molto dal tipo del
campo su cui fai la query, sul db utilizzato e sul driver jdbc (dipende da
come tratta la sintassi di limitazione).
Prova a fare dei test provando diversi driver. 20 secondo sono francamente
ecceessivi, nessun utente te li accettera'.
Posta qualcosa in piu', magari...
--
---
Francesco Galli / Cinghiale Mannaro
Personal: http://cinghialemannaro.splinder.com
TMS project: http://tms.inera.it
|
|
| Back to top |
|
 |
Scorpio Guest
|
Posted: Mon May 30, 2005 9:47 am Post subject: Re: Tempi di esecuzione query. |
|
|
"Francesco Galli" <cinghialemannaroinenglish (AT) interfree (DOT) it> ha scritto nel
messaggio news:429add83_1 (AT) x-privat (DOT) org...
| Quote: | Prova su it.comp.software.database... comunque dipende molto dal tipo del
campo su cui fai la query, sul db utilizzato e sul driver jdbc (dipende da
come tratta la sintassi di limitazione).
Prova a fare dei test provando diversi driver. 20 secondo sono francamente
ecceessivi, nessun utente te li accettera'.
|
E' in effetti quello che temo.. ti ringrazio per le dritte...
Purtroppo c'è ben poco da postare: a livello di codice, non si fa altro che
eseguire uno preparedStatement con una select secca. Niente arzigogoli nè
giri strani....
Grazie ancora!
Scorpio.
|
|
| Back to top |
|
 |
Francesco Galli Guest
|
Posted: Mon May 30, 2005 9:49 am Post subject: Re: Tempi di esecuzione query. |
|
|
Che DB stai usando, e quale sintassi di limitazione? La stessa query,
eseguita dal client, ci impiega lo stesso tempo?
--
---
Francesco Galli / Cinghiale Mannaro
Personal: http://cinghialemannaro.splinder.com
TMS project: http://tms.inera.it
|
|
| Back to top |
|
 |
Scorpio Guest
|
Posted: Mon May 30, 2005 10:01 am Post subject: Re: Tempi di esecuzione query. |
|
|
"Francesco Galli" <cinghialemannaroinenglish (AT) interfree (DOT) it> ha scritto nel
messaggio news:429ae1ab_2 (AT) x-privat (DOT) org...
| Quote: | Che DB stai usando, e quale sintassi di limitazione? La stessa query,
eseguita dal client, ci impiega lo stesso tempo?
|
Si tratta del DB2 nativo su AS400. Se uso il client a riga di comando, i
tempi sono addirittura peggiori, a meno che non utilizzi l'interprete SQL
nativo.
Quest'ultimo, però, può fare una cosa che in SQL non si può fare: ossia,
tiene probabilmente traccia di un puntatore diretto alla struttura interna
del DB2 / 400. Ciò spiegherebbe la velocità di esecuzione del client
"tradizionale".
Ora, la query è semplicemente quella che ho postato: "SELECT
CODICE,DESCRIZIONE FROM TABELLA WHERE DESCRIZIONE LIKE %parametro% FETCH
FIRST 200 ROWS ONLY", dove parametro è passato dall'utente.
La fetch limita il resultSet ad un numero prefissato di tuple. Per
"paginare" i risultati, tengo traccia della pagina corrente, e mi "sposto"
all'interno del resultset utilizzando il metodo absolute(). In effetti le
paginazioni successive sono velocissime (qualche decimo), pur dovendo
rieseguire ogni volta la query (anticipo una tua logica replica: potrei
anche cachare il resultset, ma mi è stato vietato)... è la prima esecuzione
che mi uccide.
Grazie,
Scorpio.
|
|
| Back to top |
|
 |
alberto Guest
|
Posted: Mon May 30, 2005 10:06 am Post subject: Re: Tempi di esecuzione query. |
|
|
| Quote: |
Ti ringrazio per la risposta. Il fatto è che, per alcune tipologie di
ricerca, il tempo di risposta è intorno ai 20 secondi. Il che è davvero
tanto,
ma purtroppo non ho la più pallida idea di come si possa ulteriormente
ottimizzare una query del tipo "select codice, descrizione from tabella
where
descrizione like %_parametro_%" limitandosi, peraltro, a caricare i primi
100 record....
|
Se non trovi una buona soluzione anche provando altri db o driver, credo che
tu debba passare a un motore di ricerca come Lucene e integrarlo nella tua
applicazione.
|
|
| Back to top |
|
 |
Francesco Galli Guest
|
Posted: Mon May 30, 2005 10:33 am Post subject: Re: Tempi di esecuzione query. |
|
|
hai notato la clausola?
LIKE '%parametro%'.
Hai voglia di indicizzarlo... cosa fai, indicizzi un varchar? :-)
--
---
Francesco Galli / Cinghiale Mannaro
Personal: http://cinghialemannaro.splinder.com
TMS project: http://tms.inera.it
|
|
| Back to top |
|
 |
Scorpio Guest
|
Posted: Mon May 30, 2005 10:35 am Post subject: Re: Tempi di esecuzione query. |
|
|
<stefanomnn (AT) yahoo (DOT) it> ha scritto nel messaggio
news:1117449041.600040.132620 (AT) g43g2000cwa (DOT) googlegroups.com...
ma il campo di ricerca è indicizzato?
Sì. Le query vengono eseguite su una vista fisica.
Scorpio.
|
|
| Back to top |
|
 |
Scorpio Guest
|
Posted: Mon May 30, 2005 10:39 am Post subject: Re: Tempi di esecuzione query. |
|
|
"Francesco Galli" <cinghialemannaroinenglish (AT) interfree (DOT) it> ha scritto nel
messaggio news:429aec12_2 (AT) x-privat (DOT) org...
| Quote: | hai notato la clausola?
LIKE '%parametro%'.
Hai voglia di indicizzarlo... cosa fai, indicizzi un varchar?
|
Ad essere precisi la vista fisica è ordinata per campo descrizione. Anche
se, ovviamente, non è la stessa cosa.
Scorpio.
|
|
| Back to top |
|
 |
Vincent Vega Guest
|
Posted: Mon May 30, 2005 11:18 am Post subject: Re: Tempi di esecuzione query. |
|
|
Scorpio wrote:
| Quote: | Ti ringrazio per la risposta. Il fatto è che, per alcune tipologie di
ricerca, il tempo di risposta è intorno ai 20 secondi. Il che è davvero
tanto,
ma purtroppo non ho la più pallida idea di come si possa ulteriormente
ottimizzare una query del tipo "select codice, descrizione from tabella
where
descrizione like %_parametro_%" limitandosi, peraltro, a caricare i primi
100 record....
|
In condizioni normali, quella restrizione costringe il database a
spazzolarsi tutta la tabella per essere verificata. Non c'è molto da
ottimizzare, se non attivando una particolare feature (se disponibile
per il tuo database) per le ricerche testuali.
|
|
| Back to top |
|
 |
Scorpio Guest
|
Posted: Mon May 30, 2005 11:34 am Post subject: Re: Tempi di esecuzione query. |
|
|
"Vincent Vega" <vincent-vega (AT) despammed (DOT) com> ha scritto nel messaggio
news:d7et0h$t69$1 (AT) area (DOT) cu.mi.it...
| Quote: | Scorpio wrote:
In condizioni normali, quella restrizione costringe il database a
spazzolarsi tutta la tabella per essere verificata. Non c'è molto da
ottimizzare, se non attivando una particolare feature (se disponibile
per il tuo database) per le ricerche testuali.
|
Quindi, mi stai dicendo che la lentezza è "congenita", ed in casi come
questi è "colpa" del database ?
Scorpio.
|
|
| Back to top |
|
 |
alberto Guest
|
Posted: Mon May 30, 2005 11:38 am Post subject: Re: Tempi di esecuzione query. |
|
|
"Scorpio" <_scorpio_NO_SPAM_ (AT) libero (DOT) it> ha scritto nel messaggio
news:429af9e1_1 (AT) x-privat (DOT) org...
| Quote: |
"Vincent Vega" <vincent-vega (AT) despammed (DOT) com> ha scritto nel messaggio
news:d7et0h$t69$1 (AT) area (DOT) cu.mi.it...
Scorpio wrote:
In condizioni normali, quella restrizione costringe il database a
spazzolarsi tutta la tabella per essere verificata. Non c'è molto da
ottimizzare, se non attivando una particolare feature (se disponibile
per il tuo database) per le ricerche testuali.
Quindi, mi stai dicendo che la lentezza è "congenita", ed in casi come
questi è "colpa" del database ?
Scorpio.
|
ti sta dicendo che i motori di ricerca non si fanno con i LIKE, nemmeno dal
punto di vista prestazionale.
|
|
| Back to top |
|
 |
Scorpio Guest
|
Posted: Mon May 30, 2005 11:42 am Post subject: Re: Tempi di esecuzione query. |
|
|
"alberto" <sdfs (AT) tiscali (DOT) it> ha scritto nel messaggio
news:429afb3b$0$15897$5fc30a8 (AT) news (DOT) tiscali.it...
| Quote: |
ti sta dicendo che i motori di ricerca non si fanno con i LIKE, nemmeno
dal
punto di vista prestazionale.
|
Ok, alternative ?
|
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|