Non è l'algoritmo di Shlemiel; ottenere la pagina 16 richiede praticamente esattamente il tempo di ottenere la pagina 1.
Sì, hai bisogno di una nuova query per pagina, ma ognuna di queste query ottiene solo un valore di una pagina di dati. Le alternative sono peggiori: se ottieni tutti dati in una volta sola e poi li filtri, avrai ancora bisogno di una query per richiesta, ma ora ognuna di queste query ottiene l'intera set di risultati, e farai il partizionamento in PHP - ma un DBMS è molto più efficace del tuo codice PHP scritto a mano. È possibile memorizzare l'intero processo, ma questo ha due aspetti negativi: si interroga ancora l'intero set di dati al primo caricamento, il che significa che qualsiasi richiesta su una cache obsoleta richiede più tempo del necessario e occorre implementare la memorizzazione nella cache, che potrebbe aggiungere un po 'di significato spese generali. Inoltre, proprio come nell'esempio annesso, è ancora necessario eseguire l'impaginazione in PHP.
Se dovesse risultare che la tua soluzione è troppo lenta, dovresti prima guardare lo schema del tuo database. Assicurati di avere gli indici appropriati nelle tabelle pertinenti. Denormalizza se devi. Se non lo fai, prendi in considerazione la memorizzazione nella cache di singole pagine.
Infine, se hai bisogno di funzionalità di ricerca scalabili, considera l'utilizzo di qualcosa che è specializzato nell'indicizzazione di documenti, ad es. Solr. Queste cose sono molto meglio per l'indicizzazione e la ricerca di documenti di quanto MySQL possa mai sperare di essere.