![]() |
Show 150 posts per page |
.dsy:it. (http://www.dsy.it/forum/)
- Tech (http://www.dsy.it/forum/forumdisplay.php?forumid=189)
-- Aiuto con database e ottimizzazione query (http://www.dsy.it/forum/showthread.php?threadid=30300)
Aiuto con database e ottimizzazione query
Qui vi voglio, esperti di database! ![]()
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!!! ![]()
Il problema è che nessun utente attenderà 23 secondi, per vedersi visualizzati i suoi 10 record richiesti! 
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!»
SELECT * FROM Tabella1 INNER JOIN Tabella 2 ON Tabella1.ID = Tabella2.ID
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!!!
__________________
?
provo a dare il mio contributo anche se non so quanto possa servire (
) :
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.
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![]()

__________________
«And if you ever smell christian blood up in the mountains, then get your axe and chop them down!»
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...


__________________
?
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![]()
__________________
"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.
Nell'altra query posso recuperare il singolo record, quindi forse sì... dovrei orientarmi verso questa direzione...
![]()
__________________
«And if you ever smell christian blood up in the mountains, then get your axe and chop them down!»
Originally posted by ripe
Nell'altra query posso recuperare il singolo record, quindi forse sì... dovrei orientarmi verso questa direzione...
![]()
__________________
"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.
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!»
| All times are GMT. The time now is 05:13. | Show all 9 posts from this thread on one page |
Powered by: vBulletin Version 2.3.1
Copyright © Jelsoft Enterprises Limited 2000 - 2002.