Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11

Discussione: Paginazione MySQL

  1. #1

    Paginazione MySQL

    Salve a tutti... volevo porvi un quesito.
    Devo fare una paginazione di una tabella (o una vista o una JOIN il discorso non deve cambiare)
    I dati che devo sapere per farla sono:
    - numero totale record
    - numero record inizio
    - numero record da visualizzare

    Avendo questi dati il gioco è facile.
    La mia domanda è proprio su come reperire questi dati, soprattutto il primo, ed i tempi di esecuzione delle varie richieste.
    La prima cosa che può venire in mente è di fare una prima query dove tiro fuori il numero totale di righe (non so qual'è la via migliore... se un count degli ID o fare la query e poi mysql_num_rows($ris) ed a sto punto una SELECT con LIMIT.
    MA così si fanno 2 query che per tabelle molto grosse potrebbe rallentare.
    Oppure faccio solo una sola query senza LIMIT dove con $totalRow = mysql_num_rows($ris); tiro fuori il numero di righe e poi con mysql_result($ris,$i,$item); all'interno di un ciclo FOR estraggo i dati dal record che serve in poi. Quindi faccio una sola Query.
    Voi che ne pensate? che soluzione usereste? Quale è la più performante?
    La fantasía, abandonada de la razón, produce monstruos imposibles; unida con ella es madre de las artes y origen de las maravillas.
    (Francisco Goya)
    ----------------------------------------
    http://www.mangioebevo.it
    http://www.definitives.org

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469

    Re: Paginazione MySQL

    Originariamente inviato da rinosan_76bis
    I dati che devo sapere per farla sono:
    - numero totale record
    - numero record inizio
    - numero record da visualizzare

    La mia domanda è proprio su come reperire questi dati, soprattutto il primo,
    Prima semplice risposta: non puoi, se non nell'unico caso di tabella myisam senza clausule where, join o cazzi vari
    ed i tempi di esecuzione delle varie richieste.
    La prima cosa che può venire in mente è di fare una prima query dove tiro fuori il numero totale di righe (non so qual'è la via migliore... se un count degli ID o fare la query e poi mysql_num_rows($ris)
    Nessuna delle due, visto che la seconda altro non è che identica alla prima
    ed a sto punto una SELECT con LIMIT.
    MA così si fanno 2 query che per tabelle molto grosse potrebbe rallentare.
    Oppure faccio solo una sola query senza LIMIT dove con $totalRow = mysql_num_rows($ris);
    La quale è lenta, ovviamente
    tiro fuori il numero di righe e poi con mysql_result($ris,$i,$item); all'interno di un ciclo FOR estraggo i dati dal record che serve in poi. Quindi faccio una sola Query.
    Voi che ne pensate? che soluzione usereste? Quale è la più performante?
    Per ordine
    1) non c'è un modo efficiente per contare le righe di una tupla (*se non ci sono situazioni particolari nelle quasi mysql usa metodi "furbi")
    2) non puoi sperare di usare php per contare "magicamente" le righe
    3) la selezione LIMIT X,Y di mysql è lentissima
    4) se le tabelle son molto grandi non è detto che tu possa caricartele tutte in memoria (le righe risultanti) e mostrarne un tot alla volta da php
    Quest'ultimo approccio (se i set son piccoli) è il più veloce.

  3. #3
    - numero totale record
    codice:
    SELECT COUNT(colonna1) FROM tabella1
    - numero record inizio
    codice:
    //lo sai prima della query
    - numero record da visualizzare
    codice:
    //lo sai prima della query
    dopodichè un SELECT con l'uso del LIMIT
    Farmacia di Jarno - le mie pillole: Cookie [#780810], Dom4Php4 [#1123236], Fade [#1139489], getCssProperty [#1152911]
    Inchinatevi difronte al Prof! Nacchio!

    A me pare che l'uomo vada avanti con la retromarcia

  4. #4
    quindi soluzione con 2 query... dici che sia più performante?
    La fantasía, abandonada de la razón, produce monstruos imposibles; unida con ella es madre de las artes y origen de las maravillas.
    (Francisco Goya)
    ----------------------------------------
    http://www.mangioebevo.it
    http://www.definitives.org

  5. #5
    comunque sollevi un problema per me molto attuale. In quale modo possiamo testare le performance/sforzo del server mysql? è sufficiente fare un test ed osservare i tempi di esecuzione delle query (stando attenti alla cache)? è valido come test?
    Farmacia di Jarno - le mie pillole: Cookie [#780810], Dom4Php4 [#1123236], Fade [#1139489], getCssProperty [#1152911]
    Inchinatevi difronte al Prof! Nacchio!

    A me pare che l'uomo vada avanti con la retromarcia

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469
    Originariamente inviato da rinosan_76bis
    quindi soluzione con 2 query... dici che sia più performante?
    no

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469
    Originariamente inviato da Jarno
    comunque sollevi un problema per me molto attuale. In quale modo possiamo testare le performance/sforzo del server mysql? è sufficiente fare un test ed osservare i tempi di esecuzione delle query (stando attenti alla cache)? è valido come test?
    dipende.
    si tratta di un argomento estremamente complesso.
    spesso si fa una gran confusione tra throughput e tempo di risposta, sono due elementi diversi che vanno misurati entrambi.
    spesso sono in disaccordo, altre volte no.

    normalmente poi bisogna vedere se esiste un upperbound, oppure se ti bastano elementi statistici (percentili), e se sei interessato alla media o alla varianza

  8. #8
    Allora la tua risposta precedente non può essere assoluta

    nb: più volte Aruba mi ha bloccato il database per eccessivo consumo di risorse, il bello è che ne io ne Aruba è in grado di capire come siano consumate queste risorse se non tramite ipotesi teoriche come quelle fatte in questa discussione
    Farmacia di Jarno - le mie pillole: Cookie [#780810], Dom4Php4 [#1123236], Fade [#1139489], getCssProperty [#1152911]
    Inchinatevi difronte al Prof! Nacchio!

    A me pare che l'uomo vada avanti con la retromarcia

  9. #9
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469
    Originariamente inviato da Jarno
    Allora la tua risposta precedente non può essere assoluta

    nb: più volte Aruba mi ha bloccato il database per eccessivo consumo di risorse, il bello è che ne io ne Aruba è in grado di capire come siano consumate queste risorse se non tramite ipotesi teoriche come quelle fatte in questa discussione
    mah, francamente un dba diciamo di medio livello è perfettamente in grado di capire cosa succede nel tuo db


    certo, se hanno millemila utenti da gestire, che pagano pochissimo ognuno, è difficile che possano darti molto più di un "top non va bene=>ciao"


    EDIT: i "problemi" di questa discussione sono banali, l'impossibilità di fare efficientemente quanto richiesto (vedi il mio primo post) è scontato

  10. #10
    Ok... scusate ma mi sono un po perso... diciamo che il problema è banale, ma la risposta nn l'ho capita.
    Io ho individuato 2 vie diverse (esposte nel mio primo post) una con 2 query ed una con una query secca.
    Per quanto banale, voi quale usereste considerando carichi notevoli? perchè ovvio che con 1 carico misero il problema non si pone.
    La fantasía, abandonada de la razón, produce monstruos imposibles; unida con ella es madre de las artes y origen de las maravillas.
    (Francisco Goya)
    ----------------------------------------
    http://www.mangioebevo.it
    http://www.definitives.org

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.