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.