Mejorando el COUNT(*) de MySQL para las paginaciones

Generalmente cuando paginamos resultados bajo PHP / MySQL, primero generamos la consulta a la BBDD con el Where y unos “LIMIT” para mostrar solo el “rango” de registros que nos interesa para la página solicitada.

Justo después de esta tipica consulta viene el COUNT (*) pero sin apliar LIMITS ni nada  para saber cuantos registros tenemos en total en la BBDD y “pintar” el sistema de paginación, es decir, la navegación de las páginas.

Pues bien, MySQL tiene un par de funciones que básicamente hacen una especie de COUNT(*) pero mucho más veloz y que vale la pena aplicar en esta situación:

  • SQL_CALC_FOUND_ROWS: calcula el número de resultados de una consulta sin LIMIT.
  • FOUND_ROWS: obtiene el resultado del último SQL_CALC_FOUND_ROWS ejecutados.

Por ejemplo, vamos a obtener de la tabla noticias,  los 5 registros de la página 2 con el sistema sin count (*):

$sql = "select SQL_CALC_FOUND_ROW id, titulo, contenido from noticias where publicado = 1 LIMIT 5,5";
 
$sqlCount = "select FOUND_ROWS() as total ";

El sistema no te libra de ejecutar 2 consultas SQL contra la BBDD pero sí que este par de funciones tienen un menor impacto sobre el sistema haciendo mucho más rápida la consulta de obtener el número de registros.

NOTA: En nuestro php.ini el valor mysql.trace_mode debe estar en Off.

Dejar un comentario

*