Felizmente, desde o MySQL 4.0.0 você pode usar
SQL_CALC_FOUND_ROWS
opção em sua consulta que dirá ao MySQL para contar o número total de linhas desconsiderando LIMIT
cláusula. Você ainda precisa executar uma segunda consulta para recuperar a contagem de linhas, mas é uma consulta simples e não tão complexa quanto sua consulta que recuperou os dados. O uso é bastante simples. Em sua consulta principal, você precisa adicionar SQL_CALC_FOUND_ROWS
opção logo após SELECT
e na segunda consulta você precisa usar FOUND_ROWS()
função para obter o número total de linhas. As consultas ficariam assim:SELECT SQL_CALC_FOUND_ROWS name, email FROM users WHERE name LIKE 'a%' LIMIT 10;
SELECT FOUND_ROWS();
A única limitação é que você deve chamar a segunda consulta imediatamente após a primeira porque
SQL_CALC_FOUND_ROWS
não salva o número de linhas em nenhum lugar. Embora esta solução também exija duas consultas, é muito mais rápida, pois você executa a consulta principal apenas uma vez. Você pode ler mais sobre SQL_CALC_FOUND_ROWS e FOUND_ROWS()
em documentos do MySQL. EDITAR: Você deve observar que, na maioria dos casos, executar a consulta duas vezes é realmente mais rápido que
SQL_CALC_FOUND_ROWS
. veja aqui
EDITAR 2019:
O modificador de consulta SQL_CALC_FOUND_ROWS e a função FOUND_ROWS() que o acompanha estão obsoletos a partir do MySQL 8.0.17 e serão removidos em uma versão futura do MySQL.
https://dev.mysql.com /doc/refman/8.0/en/information-functions.html#function_found-rows
É recomendável usar
COUNT
em vez de SELECT * FROM tbl_name WHERE id > 100 LIMIT 10;
SELECT COUNT(*) WHERE id > 100;