Er staat een goede beschrijving in deze blog:https://www.percona.com/blog/2007/08/28/to-sql_calc_found_rows-or-not-to-sql_calc_found_rows/
De demonstratie laat zien dat ja, het gebruik van SQL_CALC_FOUND_ROWS erg slecht is voor de prestaties als je het op een grote tafel gebruikt.
Het is vaak beter om twee zoekopdrachten afzonderlijk uit te voeren:
/* 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
Dit heeft trouwens niets te maken met het probleem SQL_CALC_FOUND_ROWS, maar ik vraag me af waarom je lid wordt van de main_members
tafel. Je haalt er geen kolommen uit. De LEFT JOIN betekent dat het de rijen niet beperkt. Als ik de tabelrelatie kan afleiden uit de kolomnamen, kan er maar één rij zijn in main_members
voor elke rij in main_articles
, dus de join verhoogt ook niet het aantal rijen. Het heeft dus echt geen zin om deze join te doen.