Der er en god beskrivelse i denne blog:https://www.percona.com/blog/2007/08/28/to-sql_calc_found_rows-or-not-to-sql_calc_found_rows/
Demonstrationen viser, at ja, brug af SQL_CALC_FOUND_ROWS er meget dårligt for ydeevnen, når du bruger det på et stort bord.
Det er ofte bedre at køre to forespørgsler separat:
/* 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
Dette er i øvrigt ikke relateret til SQL_CALC_FOUND_ROWS-problemet, men jeg undrer mig over, hvorfor du tilslutter dig main_members
bord. Du henter ingen kolonner fra den. LEFT JOIN betyder, at den ikke begrænser rækkerne. Hvis jeg kan udlede tabelrelationen ud fra kolonnenavnene, kan der kun være én række i main_members
for hver række i main_articles
, så joinforbindelsen øger heller ikke antallet af rækker. Så der er virkelig ikke noget formål at gøre dette join.