Dsy Network www | forum | my | didattica | howto | wiki | el goog | stats | blog | dona | rappresentanti
Homepage
 Register   Calendar   Members  Faq   Search  Logout 
.dsy:it. : Powered by vBulletin version 2.3.1 .dsy:it. > Community > Tech > Aiuto con database e ottimizzazione query
  Last Thread   Next Thread
Author
Thread    Expand all | Contract all    Post New Thread    Post A Reply
Collapse
ripe
- up in the mountains -

User info:
Registered: Jun 2002
Posts: 9469 (1.09 al dì)
Location: Cinisellooo
Corso: TICO TICO
Anno: Primo
Time Online: 61 Days, 2:33:39 [...]
Status: Offline

Post actions:

Edit | Report | IP: Logged
Aiuto con database e ottimizzazione query

Qui vi voglio, esperti di database! :D

Sto realizzando un'applicazione web con una tabella che contiene un campo di tipo nvarchar(MAX) (l'equivalente di ntext, un grosso testo in codifica UNICODE tanto per intenderci).

Ebbene, ho una query che legge dal DB tutti i record di questa tabella (circa 6000), e i risultati sono disarmanti: se inserisco nei campi della SELECT anche quello che contiene il testo, ci vogliono ben 23 secondi, se invece eseguo la selezione senza neanche un secondo!!! :shock:

Il problema è che nessun utente attenderà 23 secondi, per vedersi visualizzati i suoi 10 record richiesti! :asd:

C'è qualche soluzione fattibile? Avevo pensato di restituire i record senza il grosso campo di testo, per poi recuperarlo in un secondo momento con un'altra query quando richiesto. Ma non mi piace perchè mi sa molto di workaround...

Un'ultima richiesta: c'è differenza prestazionale nell'unire due tabelle tra questi due modi?

1) SELECT * FROM Tabella1, Tabella2 WHERE Tabella1.ID = Tabella2.ID

2) SELECT * FROM Tabella1 INNER JOIN Tabella 2 ON Tabella1.ID = Tabella2.ID

Grazie a chi vorrà darmi una mano!

__________________
«And if you ever smell christian blood up in the mountains, then get your axe and chop them down!»

07-04-2007 11:28
Click Here to See the Profile for ripe Click Here to See the Blog of ripe Click here to Send ripe a Private Message Find more posts by ripe Add ripe to your buddy list Printer Friendly version Email this Article to a friend Reply w/Quote
Collapse
yeah
.grande:maestro.

User info:
Registered: Nov 2003
Posts: 1644 (0.20 al dì)
Location: Cologno Monzese
Corso: Informatica Magistrale
Anno: II
Time Online: 12 Days, 21:36:41 [...]
Status: Offline

Post actions:

Edit | Report | IP: Logged


SELECT * FROM Tabella1 INNER JOIN Tabella 2 ON Tabella1.ID = Tabella2.ID

Mi è stato insegnato a fare i JOIN con la parola JOIN, non con una condizione in WHERE, quindi consiglio la (2) :D però non conosco le specifiche del linguaggio per poterlo affermare con certezza.


Ebbene, ho una query che legge dal DB tutti i record di questa tabella (circa 6000), e i risultati sono disarmanti: se inserisco nei campi della SELECT anche quello che contiene il testo, ci vogliono ben 23 secondi, se invece eseguo la selezione senza neanche un secondo!!!

Fai anche WHERE sul campo testo oppure lo aggiungi semplicemente alle colonne restituite?

[edit]

Nel secondo caso potrebbe essere un problema di performance sì: se hai in media 10K di testo in ogni riga allora ci vuole un po' per prelevare da disco più di 60 mega di dati ;)

__________________
?

07-04-2007 14:40
Click Here to See the Profile for yeah Click here to Send yeah a Private Message Find more posts by yeah Add yeah to your buddy list Printer Friendly version Email this Article to a friend Reply w/Quote
Collapse
Drake83
Fan di Splinter

User info:
Registered: Nov 2003
Posts: 1631 (0.20 al dì)
Location: Garbagnate milanese
Corso: Tutto finito
Anno:
Time Online: 108 Days, 5:46:38 [...]
Status: Offline

Post actions:

Edit | Report | IP: Logged

provo a dare il mio contributo anche se non so quanto possa servire ( :asd: ) :

1) hai provato ad indicizzare le tabelle ?
2) concordo con yeah: di solito l'uso join non necessita il where.

__________________
"io non sono come gli altri Robin Hood, io non ballo coi lupi"
"ogni mattina come narciso si specchia nel ruscello retrovisore", "ci sono mille modi per chiamare dio...dio,allha,adta,arauffa,crisma..afjasf...tanto non ti risponde"

Corrado Guzzanti è il mio Dio.
Roberto Saviano eroe nazionale.

07-04-2007 14:52
Click Here to See the Profile for Drake83 Click Here to See the Blog of Drake83 Click here to Send Drake83 a Private Message Find more posts by Drake83 Add Drake83 to your buddy list Printer Friendly version Email this Article to a friend Reply w/Quote
Collapse
ripe
- up in the mountains -

User info:
Registered: Jun 2002
Posts: 9469 (1.09 al dì)
Location: Cinisellooo
Corso: TICO TICO
Anno: Primo
Time Online: 61 Days, 2:33:39 [...]
Status: Offline

Post actions:

Edit | Report | IP: Logged

Originally posted by yeah


Fai anche WHERE sul campo testo oppure lo aggiungi semplicemente alle colonne restituite?

[edit]

Nel secondo caso potrebbe essere un problema di performance sì: se hai in media 10K di testo in ogni riga allora ci vuole un po' per prelevare da disco più di 60 mega di dati ;)


Si, è proprio questo secondo caso, e c'è parecchio testo in ogni riga...
Quindi c'è ben poco da fare mi sa... mmmmm :sad:

Si Drake, ho degli indici sulle tabelle, per i campi su cui specifico degli ordinamenti... ma non è che le prestazioni ne abbiano ricavato chissà quali benefici!

Grazie a entrambi! :)

__________________
«And if you ever smell christian blood up in the mountains, then get your axe and chop them down!»

07-04-2007 15:00
Click Here to See the Profile for ripe Click Here to See the Blog of ripe Click here to Send ripe a Private Message Find more posts by ripe Add ripe to your buddy list Printer Friendly version Email this Article to a friend Reply w/Quote
Collapse
yeah
.grande:maestro.

User info:
Registered: Nov 2003
Posts: 1644 (0.20 al dì)
Location: Cologno Monzese
Corso: Informatica Magistrale
Anno: II
Time Online: 12 Days, 21:36:41 [...]
Status: Offline

Post actions:

Edit | Report | IP: Logged

Gli indici servono se fai WHERE / JOIN etc, evitano i table scan, però se devi materialmente recuperare i dati (come nel caso delle colonne delle select) e i dati sono in grande quantità c'è poco da fare.

Originally posted by ripe

C'è qualche soluzione fattibile? Avevo pensato di restituire i record senza il grosso campo di testo, per poi recuperarlo in un secondo momento con un'altra query quando richiesto. Ma non mi piace perchè mi sa molto di workaround...

Probabilmente è la soluzione migliore :)

[edit]

Oppure metti tanti dischi in RAID quanto basta a saturare la banda passante, così dovresti riuscire a minimizzare il tempo della query :asd:

__________________
?

Last edited by yeah on 07-04-2007 at 15:32

07-04-2007 15:22
Click Here to See the Profile for yeah Click here to Send yeah a Private Message Find more posts by yeah Add yeah to your buddy list Printer Friendly version Email this Article to a friend Reply w/Quote
Collapse
Drake83
Fan di Splinter

User info:
Registered: Nov 2003
Posts: 1631 (0.20 al dì)
Location: Garbagnate milanese
Corso: Tutto finito
Anno:
Time Online: 108 Days, 5:46:38 [...]
Status: Offline

Post actions:

Edit | Report | IP: Logged

Originally posted by yeah

C'è qualche soluzione fattibile? Avevo pensato di restituire i record senza il grosso campo di testo, per poi recuperarlo in un secondo momento con un'altra query quando richiesto. Ma non mi piace perchè mi sa molto di workaround...

Probabilmente è la soluzione migliore :)


Sì è vero è la soluzione migliore se poi nell'altra query puoi ricercare più nello specifico altrimenti il problema si ripropone. Ci vorrebbe un esperto di tuning di basi di dati e purtroppo quest'esame non l'ho seguito :D

__________________
"io non sono come gli altri Robin Hood, io non ballo coi lupi"
"ogni mattina come narciso si specchia nel ruscello retrovisore", "ci sono mille modi per chiamare dio...dio,allha,adta,arauffa,crisma..afjasf...tanto non ti risponde"

Corrado Guzzanti è il mio Dio.
Roberto Saviano eroe nazionale.

07-04-2007 15:34
Click Here to See the Profile for Drake83 Click Here to See the Blog of Drake83 Click here to Send Drake83 a Private Message Find more posts by Drake83 Add Drake83 to your buddy list Printer Friendly version Email this Article to a friend Reply w/Quote
Collapse
ripe
- up in the mountains -

User info:
Registered: Jun 2002
Posts: 9469 (1.09 al dì)
Location: Cinisellooo
Corso: TICO TICO
Anno: Primo
Time Online: 61 Days, 2:33:39 [...]
Status: Offline

Post actions:

Edit | Report | IP: Logged

Nell'altra query posso recuperare il singolo record, quindi forse sì... dovrei orientarmi verso questa direzione...

:D

__________________
«And if you ever smell christian blood up in the mountains, then get your axe and chop them down!»

07-04-2007 15:44
Click Here to See the Profile for ripe Click Here to See the Blog of ripe Click here to Send ripe a Private Message Find more posts by ripe Add ripe to your buddy list Printer Friendly version Email this Article to a friend Reply w/Quote
Collapse
Drake83
Fan di Splinter

User info:
Registered: Nov 2003
Posts: 1631 (0.20 al dì)
Location: Garbagnate milanese
Corso: Tutto finito
Anno:
Time Online: 108 Days, 5:46:38 [...]
Status: Offline

Post actions:

Edit | Report | IP: Logged

Originally posted by ripe
Nell'altra query posso recuperare il singolo record, quindi forse sì... dovrei orientarmi verso questa direzione...

:D


ah se puoi secondo me è la soluzione + facile e + conveniente :D

__________________
"io non sono come gli altri Robin Hood, io non ballo coi lupi"
"ogni mattina come narciso si specchia nel ruscello retrovisore", "ci sono mille modi per chiamare dio...dio,allha,adta,arauffa,crisma..afjasf...tanto non ti risponde"

Corrado Guzzanti è il mio Dio.
Roberto Saviano eroe nazionale.

07-04-2007 15:46
Click Here to See the Profile for Drake83 Click Here to See the Blog of Drake83 Click here to Send Drake83 a Private Message Find more posts by Drake83 Add Drake83 to your buddy list Printer Friendly version Email this Article to a friend Reply w/Quote
Collapse
ripe
- up in the mountains -

User info:
Registered: Jun 2002
Posts: 9469 (1.09 al dì)
Location: Cinisellooo
Corso: TICO TICO
Anno: Primo
Time Online: 61 Days, 2:33:39 [...]
Status: Offline

Post actions:

Edit | Report | IP: Logged

RISOLTO!!!!!!!!!!!

Mi avete messo sulla buona strada, e studiando meglio la query ho trovato la soluzione!
In pratica eseguo la ricerca dei 10 record per la paginazione prelevando i dati dalla tabella alleggerita ed eseguo il join con i 10 campi di testo pesante solo alla fine.

Ora è una scheggia!

Grazie a chi mi ha dato una mano!

__________________
«And if you ever smell christian blood up in the mountains, then get your axe and chop them down!»

Last edited by ripe on 07-04-2007 at 17:02

07-04-2007 16:55
Click Here to See the Profile for ripe Click Here to See the Blog of ripe Click here to Send ripe a Private Message Find more posts by ripe Add ripe to your buddy list Printer Friendly version Email this Article to a friend Reply w/Quote
All times are GMT. The time now is 23:50.    Post New Thread    Post A Reply
  Last Thread   Next Thread
Show Printable Version | Email this Page | Subscribe to this Thread | Add to Bookmarks

Forum Jump:
Rate This Thread:

Forum Rules:
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts
HTML code is OFF
vB code is ON
Smilies are ON
[IMG] code is ON
 

Powered by: vBulletin v2.3.1 - Copyright ©2000 - 2002, Jelsoft Enterprises Limited
Mantained by dsy crew (email) | Collabora con noi | Segnalaci un bug | Archive | Regolamento | Licenze | Thanks | Syndacate
Pagina generata in 0.083 seconds (72.62% PHP - 27.38% MySQL) con 23 query.