Paginación MySQL: recuperación eficiente de resultados y recuento total
Al implementar la paginación en MySQL, es una práctica común realizar dos consultas separadas: una para obtener el número total de resultados y otro para limitar los registros recuperados. Este enfoque, conocido como consulta doble, puede resultar ineficiente para conjuntos de datos grandes.
Sin embargo, surge la pregunta de si es posible recuperar el recuento total de resultados y limitar los resultados en una sola consulta. Si bien no existe una forma directa de lograr esto, hay dos métodos alternativos disponibles:
SQL_CALC_FOUND_ROWS y FOUND_ROWS()
En lugar de realizar doble consulta, puede utilizar SQL_CALC_FOUND_ROWS y funciones FOUND_ROWS() para lograr un resultado similar. La consulta con SQL_CALC_FOUND_ROWS precede a la consulta limitante y la llamada a FOUND_ROWS() recupera el recuento total.
Ejemplo:
SELECT SQL_CALC_FOUND_ROWS * FROM `table` WHERE `some_condition`; SELECT FOUND_ROWS();
Nota: Este método tiene un posible inconveniente. MySQL tiene un error que afecta las consultas ORDER BY cuando se utiliza esta técnica, lo que la hace más lenta en tablas grandes.
Almacenamiento en caché del recuento
Una solución alternativa implica almacenar en caché el recuento total por una duración específica. Este enfoque elimina la necesidad de realizar una consulta independiente para obtener el recuento y al mismo tiempo preservar la eficiencia.
Ejemplo:
Recuperar el recuento y almacenarlo en caché durante 10 minutos:
SET @count = (SELECT COUNT(*) FROM `table` WHERE `some_condition`);
En consultas posteriores, utilice el recuento en caché:
SELECT * FROM `table` WHERE `some_condition` LIMIT 0, 10;
El almacenamiento en caché del recuento mejora significativamente el rendimiento, especialmente para las páginas visitadas con frecuencia. Si bien no es una solución de consulta única, logra el mismo resultado y es más eficiente que la consulta doble.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3