125 messaggi dal 22 agosto 2001
Ciao,

Forse è una domanda banale: sto cercando di ottimizzare la velocità di una query che effettua una select su un db (Access) di migliaia di record (attorno ai 50.000) e li pagina.

Al momento opero in maniera classica: creo il recordset con tutti i record che corrispondono alle richieste della query e muovo il cursore fino al primo della pagina da visualizzare, per poi visualizzare gli n record seguenti fino al completamento della pagina.

Visto che i record vengono paginati a gruppi piccoli, ad esempio 20 o 30 alla volta, non è possibile fare in modo che al caricamento della pagina nel recordset vengano caricati solo tali record? In questo modo la query di selezione dovrebbe essere molto più veloce. E se non si può, c'è un modo per velocizzare la paginazione senza dover caricare sempre tutti i record del db nel recordset?

ciao e grazie!
9 messaggi dal 10 febbraio 2006
www.stefanogruppo.it
mi scrivi la query che usi ! così provo a vedere di ottimizzarla, e soprattutto i campi che vuoi visualizzare.

stefanogruppo.it
125 messaggi dal 22 agosto 2001
Ciao

la query è banalmente:

query = "SELECT * FROM [testo] WHERE [categoria]= " & categoria

purtroppo i campi della tabella [testo] mi servono tutti. La tabella contiene circa 50.000 record.
Vorrei paginare per n testi per pagina, sarebbe bella un modo per riempire il recordest solo dei record da x a x+n. cosa che garantirebbe un minore spreco di memoria e maggiore velocità.

si può fare qualcosa?

ciao
9 messaggi dal 10 febbraio 2006
www.stefanogruppo.it
Prova a dividere il risultato in pagine da 20 risultati ognuna in questo modo.
ciao
<%

pg = TRIM (request("pg"))
if pg = "" then pg = 1

sql = "SELECT * FROM [testo] WHERE [categoria]= " & categoria

Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open sql, Conn ,3,3

' per visualizzare 20 risultati-------------------------
rs.PageSize = 20

if not rs.eof or not rs.bof then

rs.AbsolutePage = pg
while not rs.eof AND rowCount < rs.PageSize
rowCount = rowCount + 1
%>



<!-- qui ci metti 20 risultati della query ------------>




<%
rs.movenext
wend
'---genera il numero delle pagine rimanenti con il link per cambiare pagina
If rs.PageCount > 1 then
for i = 1 to rs.PageCount
if i <> cINT(pg) then %>
<a href="pagina.asp?pg=<%=i%>"><%=i%></a>
<% else
response.Write(i)
END IF
NEXT
END IF

end if
'-------------chiudo il recordset
rs.Close
set rs = Nothing
%>

stefanogruppo.it
125 messaggi dal 22 agosto 2001
Ciao,

si, è quello che già faccio in effetti. Il problema è che la richiesta è molto lenta, immagino proprio a causa della query che deve riempire il recordset con migliaia di record "inutili" (perché alla fine ne visualizzo solo n).
E questo accade per ogni pagina che carico. Pensavo esistesse un modo per limitare la query e non solo la visualizzazione.
9 messaggi dal 10 febbraio 2006
www.stefanogruppo.it
La query puoi anche limitarla ma poi non sarà in grado di sapere quante pagine mancano e quindi non visualizzerai il numero di pagine successive.
Secondo me devi limitare i risultati utilizzando la clausola Where su più campi per esempio facendo vedere solo ne news del 2007 attraverso un pulsante, ma è solo un esempio.

stefanogruppo.it
125 messaggi dal 22 agosto 2001
Ciao,

capisco, però potrei memorizzare il numero di pagine all'inizio ed utilizzarlo in seguito. Potresti indicarmi come limitare il numero di record della query? Vorrei fare delle prove.

Per quanto riguarda la clausola where non posso usarla perché i record sono tutti utili allo stesso modo. Purtroppo il "bacino" è sempre la tabella totale è per questo che vorrei limitare pagina per pagina il caricamento di una fetta di n record soltanto.

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.