Estoy tratando de usar JOOQ para paginar los resultados de Mysql DB, quiero solicitar mi base de datos MySQL para un desplazamiento específico.
Mis clientes solicitan diferentes tamaños de resultados con diferentes compensaciones y mi servicio no tiene estado.
No quiero usar límite y compensación porque sé que tienen un mal rendimiento.
public void fetch() { Cursor<Record> cursor = null; String query = "books WHERE type = 'KIDS'"; try { cursor = create.selectFrom(query).fetchLazy(); while (cursor.hasNext()) { Record book = cursor.fetchNext(); } } finally { if (cursor != null) { cursor.close(); } } }¿Cómo puedo empezar desde la página 5 o desde los libros 1000 a 1100?
Saludos, Matan
En cuanto al rendimiento, no hay nada malo con LIMIT . Es cierto que OFFSET puede generar problemas de rendimiento, porque el servidor de la base de datos debe procesar las filas omitidas de OFFSET como si realmente las hubiera obtenido, con la excepción de no tener que transferirlas por cable.
Habiendo dicho eso, su enfoque de intentar implementar OFFSET en el cliente Java es mucho peor que implementarlo en SQL. Usted hace (al menos) la misma cantidad de trabajo en el lado del servidor, mientras transfiere muchos más datos al cliente solo para descartarlos nuevamente. Simplemente use OFFSET , en este caso, si debe paginar a la página 5.
Una forma más rápida de paginar es la paginación de conjunto de claves, que es compatible con jOOQ a través de la cláusula SEEK . Es un tipo diferente de paginación, que no permite saltar a la página 5 muy fácilmente, solo a la "página siguiente" (como por ejemplo, la línea de tiempo de Twitter).