V tomto blogu je dobrý popis:https://www.percona.com/blog/2007/08/28/to-sql_calc_found_rows-or-not-to-sql_calc_found_rows/
Ukázka ukazuje, že ano, použití SQL_CALC_FOUND_ROWS je velmi špatné pro výkon, když jej používáte na velkém stole.
Často je lepší spustit dva dotazy samostatně:
/* 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
Mimochodem, toto nesouvisí s problémem SQL_CALC_FOUND_ROWS, ale zajímalo by mě, proč se připojujete k main_members
stůl. Nenačítáte z něj žádné sloupce. LEFT JOIN znamená, že nebude omezovat řádky. Pokud mohu odvodit vztah tabulky z názvů sloupců, může být v main_members
pouze jeden řádek pro každý řádek v main_articles
, takže spojení nezvýší ani počet řádků. Takže toto spojení opravdu nemá smysl.