Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2002
    Messaggi
    239

    Mysql paginazione e prestazioni teoriche

    codice:
    sql = "SELECT * FROM messaggi ORDER BY ID_msg DESC"
    Set RS = Server.CreateObject("ADODB.Recordset")
    RS.PageSize = 30
    RS.CacheSize = 30
    RS.CursorLocation = 3
    RS.Open sql, dbConn
    Una domanda semplice semplice: se io uso la paginazione, come sopra, la pagina va a selezionare tutti i record e poi ne estrae 30, oppure estrae a blocchi di 30 fregandosene del resto?

    Mi interessa perchè in un blog che ho sviluppato, e che usa un semplice LIMIT per estrarre i dati poco alla volta, ho raggiunto già quota 8560 record... è lento da morire!

  2. #2
    Moderatore di ASP e MS Server L'avatar di Roby_72
    Registrato dal
    Aug 2001
    Messaggi
    19,559
    Non ho ben capito.
    MySQL tramite la clausola LIMIT (inizio, fine) incorpora una sorta di paginazione naturale che estrare SOLO quello che ti serve, fregandosene del resto.

    Roby

  3. #3
    Utente di HTML.it L'avatar di 99eros9
    Registrato dal
    Jan 2003
    Messaggi
    2,637
    Quello non è il giusto modo di paginare con mysql. Quello giusto te lo ha suggerito Roby.
    Tala är silver men tiga är guld!
    Pubblica il tuo curriculum
    Segnala il tuo sito
    Ancl

  4. #4
    Confermo: la ragione è che se usi le opzioni di paginazione del recordset, queste vengono applicate dopo che mysql ha già estratto TUTTI i record, mentre con la LIMIT questo non avviene.
    "Le uniche cose che sbagli sono quelle che non provi a fare."
    Atipica

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2002
    Messaggi
    239
    scusate

    com'è questa storia della paginazione? mi sta venendo un po di confusione

    io devo prendere nella prima pagina i record dall'ultimo fino all'ultimo meno 30

    nella seconda pagina devo prendere ((dall'ultimo - 30)+1) fino a ((dall'ultimo - 30)+1)+30

    insomma, prendere i record a 30 a 30

    potete spiegarmi bene la sintassi per farlo con la LIMIT?
    ho cercato in giro masembra che tutti lo faccian con gli ADO...

  6. #6
    La logica della limit è semplice:

    LIMIT x,y;

    Significa prendi Y righe a partire dalla X-esima.

    Il che implica che se vuoi poter partire dall'ultima, o se devi calcolare quante pagine hai dovrai prima fare una query che ti restituisce il numero totale di righe usando la COUNT, poi con questo numero di righe potrai creare la clausola LIMIT che ti serve.

    Tutto chiaro?
    "Le uniche cose che sbagli sono quelle che non provi a fare."
    Atipica

  7. #7
    Utente di HTML.it L'avatar di 99eros9
    Registrato dal
    Jan 2003
    Messaggi
    2,637
    codice:
    intPagina = CInt(request("pag"))
    ''Pagina attuale
    if intPagina <=0 then intPagina=1
    PageSize = 30
    inizio=(intPagina-1)*PageSize
    
    totPagine = int_msgTotali/PageSize
    If totPagine - CInt( totPagine ) > 0 Then
    	totPagine = CInt( totPagine + 1 )
    Else
    	totPagine = CInt( totPagine )
    End If
    
    sql = "SELECT * FROM messaggi LIMIT " & inizio & "," & PageSize & " ORDER BY ID_msg DESC"
    poi.. continui come vuoi te. Io di solito, per paginizioni in cui il numero di info da mostrare per pagina non sono esagerate uso getrows()
    Tala är silver men tiga är guld!
    Pubblica il tuo curriculum
    Segnala il tuo sito
    Ancl

  8. #8
    Utente di HTML.it
    Registrato dal
    Mar 2002
    Messaggi
    239
    Adesso abbastanza

    ma fare 2 query alla fine risulta più veloce di farne una con le ADO?
    A me interessa aumentare le prestazioni perchè con un database molto grosso a volte c'è da spararsi...

  9. #9
    Utente di HTML.it L'avatar di 99eros9
    Registrato dal
    Jan 2003
    Messaggi
    2,637
    dove vedi 2 query su quello che ti ho postato?
    Tala är silver men tiga är guld!
    Pubblica il tuo curriculum
    Segnala il tuo sito
    Ancl

  10. #10
    Originariamente inviato da Maxx_ale
    Adesso abbastanza

    ma fare 2 query alla fine risulta più veloce di farne una con le ADO?
    A me interessa aumentare le prestazioni perchè con un database molto grosso a volte c'è da spararsi...
    Fare due query direttamente sul motore db è SICURAMENTE più veloce che usare la paginazione lato client di ADO...

    Sarei pronto a giurarci!
    "Le uniche cose che sbagli sono quelle che non provi a fare."
    Atipica

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.