Blog de Gonzalo

MEJORAR LA PAGINACIÓN CON MYSQL

Siempre que se programa un sistema de contenidos con paginación, como pueden ser los comentarios de una noticia, o mostrar los post de un blog se suele programar con dos queries:

  • Una query que recupera los datos de la base de datos, como url, título y entradilla y que usa la restricción LIMIT para no recuperar todos los datos de la base de datos
  • Una query con un count para mostrar el total de elementos de la paginación
Pero con mysql hay una manera de hacerlo algo más eficiente, aunque es inevitable la ejecución de dos queries y hay que usar las siguientes funciones de mysql
  • 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.
Voy a poner un ejemplo para entenderlo mejor:

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

Estas dos funciones tienen un menor impacto sobre la base de datos haciendo mucho más rápida la consulta de obtener el número de registros.
NOTA: En fichero php.ini el valor mysql.trace_mode debe estar en Off. Esta opción es el Modo de rastreo y cuando mysql.trace_mode está habilitada, los warnings para exploraciones de tablas/índices, o conjuntos de resultados no libres y errores de SQL serán mostrados.

Compartir en twitter