Afortunadamente, desde MySQL 4.0.0 puedes usar SQL_CALC_FOUND_ROWS
opción en su consulta que le indicará a MySQL que cuente el número total de filas sin tener en cuenta LIMIT
cláusula. Todavía necesita ejecutar una segunda consulta para recuperar el recuento de filas, pero es una consulta simple y no tan compleja como la consulta que recuperó los datos. El uso es bastante simple. En su consulta principal, debe agregar SQL_CALC_FOUND_ROWS
opción justo después de SELECT
y en la segunda consulta necesita usar FOUND_ROWS()
función para obtener el número total de filas. Las consultas se verían así:
SELECT SQL_CALC_FOUND_ROWS name, email FROM users WHERE name LIKE 'a%' LIMIT 10;
SELECT FOUND_ROWS();
La única limitación es que debe llamar a la segunda consulta inmediatamente después de la primera porque SQL_CALC_FOUND_ROWS
no guarda el número de filas en ninguna parte. Aunque esta solución también requiere dos consultas, es mucho más rápida, ya que ejecuta la consulta principal solo una vez. Puede leer más sobre SQL_CALC_FOUND_ROWS y FOUND_ROWS()
en documentos de MySQL.
EDITAR: Debe tener en cuenta que, en la mayoría de los casos, ejecutar la consulta dos veces es más rápido que SQL_CALC_FOUND_ROWS
. consulte aquí
EDITAR 2019:
El modificador de consulta SQL_CALC_FOUND_ROWS y la función FOUND_ROWS() que lo acompaña están en desuso a partir de MySQL 8.0.17 y se eliminarán en una versión futura de MySQL.
https://dev.mysql.com /doc/refman/8.0/en/information-functions.html#function_found-rows
Se recomienda usar COUNT
en cambio
SELECT * FROM tbl_name WHERE id > 100 LIMIT 10;
SELECT COUNT(*) WHERE id > 100;