25 messaggi dal 06 settembre 2002
Ciao a tutti,

ho una domanda circa la paginazione dei risultati di una query.

Ho un db su cui applico il classico sistema di impaginazione dei risultati. Funziona e non ho particolari problemi. Pero' vorrei sapere se è possibile ottimizzare la procedura perché è molto pesante.

La query che effettuo è infatti composta da molte union su tabelle diverse. Da quello che mi sembra di capire agisce così (100 riusltati per pagina):

- la pagina recupera i parametri
- calcola la query
- crea il recordset
- visualizza i risultati da [recordiniziale] a [recordiniziale+100]

questo lo fa per pagina 1, 2, 3, ecc...

Non è possibile fare in modo che il calcolo della query sia fatto solo 1 volta visto che poi è la stessa per tutte le pagine della ricerca?

Ho pensato a soluzioni possibili ma non mi convincono:

- una tabella temporanea sarebbe assurdo: se ci sono 100 utenti che fanno una ricerca mi trovo 100 tab temporanee...

- sarebbe bello poter passare l'intero recordset come parametro tra una pagina e l'altra, ma si può?

- mi hanno parlato anche delle viste...ma da quello che ho capito anche quelle vengono ricalcolate ogni volta che vengono richiamate per cui...siamo al punto di partenza.


Qualcuno ha una soluzione?


ciao e grazie!!!
17 messaggi dal 27 gennaio 2006
www.marcopipino.it

- una tabella temporanea sarebbe assurdo: se ci sono 100 utenti che fanno una ricerca mi trovo 100 tab temporanee...

Mica tanto.
Forse puoi fare una tabella dei risultati unica con un campo id_session o id_utente, roba del genere, e poi richiamare nella pagina successiva.


- sarebbe bello poter passare l'intero recordset come parametro tra una pagina e l'altra, ma si può?


Questo è assurdo in quanto faresti viaggiare su internet ( o intranet) un recordset che oltre ad avere informazioni delicate potrebbe avere vai MB di grandezza.



- mi hanno parlato anche delle viste...ma da quello che ho capito anche quelle vengono ricalcolate ogni volta che vengono richiamate per cui...siamo al punto di partenza.

La vista non è altro che una query preconfezionata è chiaro che viene ricalcolata ogni volta, secodno me non è la soluzione giusta.


Qualcuno ha una soluzione?


Sì, asp.net uno delle più importanti nuove features è proprio quello di far mantenere in memoria al server i recordset per le paginazioni, ma non penso sia il caso di cambiare piattaforma.

Secondo me la soluzione della tabella unica con la insert iniziale
potrebbe funzionare.


ciao
25 messaggi dal 06 settembre 2002
Ciao

grazie per la risposta. In effetti quando parlavo di passare il recordset attraverso le pagine, la mia idea era quella che rimanesse in memoria sul server e non che venisse passato proprio come oggetto "fisico". Ma comunque hai chiarito la cosa.

L'idea della tab temporanea è buona ma non è molto controllabile, mi spiego:

Non ho specificato che il db è un listino prodotti di una certa dimensione, circa 60.000 record. Ammettiamo che i sopracitati 100 utenti che stanno cercando sul sito creino ciascuno una serie di record (potrebbero essere qualche decina o qualche centinaio o forse anche di più). Mi troverei in poco tempo una tab temp enorme e col problema di capire quando cancellare determinati record (in molti casi non è facile capire quando l'utente smette di "cercare").

Una tabella del genere è una mina vagante, anche cercando di imporre dei controlli. Ne varrebbe la pena?

ciao!

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.