Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Obter o número total de linhas ao usar LIMIT?


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;