martes, 30 de octubre de 2007

Mejorar paginación

Recientemente descubrí un método para poder mejorar el rendimiento de una paginación en MySQL. Generalmente se necesitan dos consultas a la base de datos, una para traer los datos y otra para saber que cantidad de datos hay en total. Lo nuevo, si bien no altera la cantidad de consultas, es que podemos hacer que el servidor MySQL sólo tenga que procesar una vez.

¿Cómo funciona esto?
En el primer pedido, además de pedirle los datos, le decimos al servidor que calcule la cantidad de filas totales de la consulta, y después hacemos una consulta para conseguir ese dato.
mysql> SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name
-> WHERE id > 100 LIMIT 10;
mysql> SELECT FOUND_ROWS();

Esto es especialmente útil si utilizamos una cláusula ORDER BY, o una consulta compleja, con subqueries, múltiples JOIN o muchos cálculos.

Consultar el manual de MySQL

No hay comentarios: