Hay una buena descripción en este blog:https://www.percona.com/blog/2007/08/28/a-sql_calc_found_rows-o-no-a-sql_calc_found_rows/
La demostración muestra que sí, usar SQL_CALC_FOUND_ROWS es muy malo para el rendimiento cuando lo usa en una tabla grande.
A menudo es mejor ejecutar dos consultas por separado:
/* 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
Por cierto, esto no está relacionado con el problema de SQL_CALC_FOUND_ROWS, pero me pregunto por qué te estás uniendo a main_members
mesa. No está obteniendo ninguna columna de él. LEFT JOIN significa que no restringirá las filas. Si puedo inferir la relación de la tabla a partir de los nombres de las columnas, solo puede haber una fila en main_members
para cada fila en main_articles
, por lo que la combinación tampoco aumentará el número de filas. Así que realmente no tiene sentido hacer esta unión.