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

SELECT SQL_CALC_FOUND_ROWS Consulta muito lenta maior que 250.000 registros


Há uma boa descrição neste blog:https://www.percona.com/blog/2007/08/28/to-sql_calc_found_rows-or-not-to-sql_calc_found_rows/

A demonstração mostra que sim, usar SQL_CALC_FOUND_ROWS é muito ruim para desempenho quando você usa em uma tabela grande.

Muitas vezes, é melhor executar duas consultas separadamente:
/* no need to do the join in this case, because it won't affect the count */
SELECT COUNT(*) 
FROM main_articles 
WHERE `article_type`='2' 

SELECT main_article.* 
FROM main_articles 
LEFT JOIN main_members 
ON article_mem_id=member_id 
WHERE `article_type`='2' 
ORDER BY article_id 
DESC LIMIT 0,20

A propósito, isso não está relacionado ao problema SQL_CALC_FOUND_ROWS, mas eu me pergunto por que você está se juntando ao main_members tabela. Você não está buscando nenhuma coluna dele. O LEFT JOIN significa que não restringirá as linhas. Se eu puder inferir o relacionamento da tabela a partir dos nomes das colunas, pode haver apenas uma linha em main_members para cada linha em main_articles , portanto, a junção também não aumentará o número de linhas. Portanto, não há realmente nenhum propósito em fazer essa junção.