Es una muy buena pregunta, y no hay una sola buena respuesta para cada caso. He usado y visto varias estrategias, cada una de ellas tiene sus pros y sus contras.
Cargando de una vez - bueno, esta es buena con tablas pequeñas, y cuando se filtran los datos. Cuando el usuario navega a otras páginas, no se envían consultas adicionales a la base de datos. El costo bajo negativo al inicio de la interacción y los requisitos de memoria muy pesados. Cuando el typicas es, el usuario no desplazará los datos completos, es el desperdicio de recursos. Sin embargo, para diccionarios pequeños, es probablemente la mejor solución.
Paginación utilizando límite/desplazamiento (PostgreSQL), rownum (Oracle) o cualquiera que sea la palabra clave. El más: tiempo de carga alto para la primera página. El signo menos: cada página siguiente se carga más lentamente, con un trabajo más intenso en el sitio de la base de datos. La mejor estrategia cuando el usuario verá típicamente una o algunas primeras páginas. Lo peor, cuando el usuario se desplazará por todos los datos. Funciona bastante bien cuando el conjunto está ordenado por clave principal, sin embargo, es terrible cuando el conjunto de datos se filtra y ordena, no por índice. Para cada página, invoca el filtrado (de manera reproducible con escaneo completo de tabla) y ordena el conjunto completo de datos en la memoria.
Desplazamiento utilizando el cursor de la base de datos. Esta es la estrategia más peligrosa. La base de datos abre el cursor para consulta y cuando el usuario requiere la página siguiente, el cursor se mueve. La estrategia óptima para el caso, cuando el usuario normalmente se desplaza por todos los datos. La estrategia preferida para los informes. Hovewer, en modo interactivo del usuario, requiere que la conexión de la base de datos sea bloqueada para el momento de la interacción. ¡Nadie más puede usarlo! ¡Y la cantidad de conexiones a la base de datos es limitada! También es muy difícil de implementar en la aplicación web, donde no se sabe si el usuario cerró el navegador o todavía está analizando los datos; no sabe cuándo liberar la conexión.
Oracle no admite la cláusula 'LIMIT' en SQL sencillo (solo en' BULK COLLECT' AFAIK). Aquí hay muchas respuestas sobre cómo usar 'ROWNUM'. –