Originariamente inviato da franzauker


non esiste un modo efficiente per paginare le righe ritornate (se per efficiente intendiamo "magico"), o meglio ci vuole un tipo di indice particolare per il kesimo elemento più grande (esiste per motori specializzati, non mi risulta nè per sql server nè per mysql)
---
La presentazione "a pagine" è inerentemente inefficiente; l'esistenza di un indice ti consente di ordinare le righe, ma nulla più.
O meglio puoi avere risposte "magiche" per il minimo e il massimo, ma non per la paginazione.

Quindi puoi
1) eliminare la paginazione
2) avere un linguaggio sufficientemente potente da mettere in cache un intero db (=> ma ti serve una macchina davvero potente)
3) studiare un metodo "furbo" per marcare le righe, così da fare interrogazioni a range (non il massimo della vita, ma con gli indici tipicamente btree risparmi un po' di attraversamento di foglie)
4) fregartene. considera però che le interrogazioni del tipo limit x,y (su mysql) non sono per nulla efficienti
Quello che dice franzkuker è indubbiamente vero...

però le soluzioni proposte sono un tantino drastiche IMHO
perché rinunciare alla paginazione? solo perché lato DB è inefficiente?

Il fatto è che là fuori è pieno di siti che la usano anche con migliaia e migliaia di record dietro...
Ora un conto è usare Access e avere tempi biblici di attesa, un conto è usare SQL Server ed essere mediamente inefficienti..

In fondo, se la paginazione è inefficiente lato DB vorrà dire che cercherai di renderla più efficiente lato web server, usando qualche caching framework messo a disposizione dal tuo linguaggio di script (come ad esempio può essere APC in ambito PHP), o studiandoti qualche altro trucchetto...

in bocca al lupo
Philbert