C'è una buona descrizione in questo blog:https://www.percona.com/blog/2007/08/28/to-sql_calc_found_rows-or-not-to-sql_calc_found_rows/
La dimostrazione mostra che sì, l'utilizzo di SQL_CALC_FOUND_ROWS è molto dannoso per le prestazioni quando lo usi su un tavolo di grandi dimensioni.
Spesso è meglio eseguire due query separatamente:
/* 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 proposito, questo non è correlato al problema SQL_CALC_FOUND_ROWS, ma mi chiedo perché ti stai unendo ai main_members
tavolo. Non stai recuperando alcuna colonna da esso. Il LEFT JOIN significa che non limiterà le righe. Se posso dedurre la relazione della tabella dai nomi delle colonne, può esserci solo una riga in main_members
per ogni riga in main_articles
, quindi il join non aumenterà nemmeno il numero di righe. Quindi non c'è davvero alcuno scopo nel fare questo join.