Det finns en bra beskrivning i den här bloggen:https://www.percona.com/blog/2007/08/28/to-sql_calc_found_rows-or-not-to-sql_calc_found_rows/
Demonstrationen visar att ja, att använda SQL_CALC_FOUND_ROWS är mycket dåligt för prestanda när du använder det på ett stort bord.
Det är ofta bättre att köra två frågor 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
Förresten, detta är inte relaterat till SQL_CALC_FOUND_ROWS-problemet, men jag undrar varför du går med i main_members
tabell. Du hämtar inga kolumner från den. LEFT JOIN betyder att den inte begränsar raderna. Om jag kan härleda tabellrelationen från kolumnnamnen kan det bara finnas en rad i main_members
för varje rad i main_articles
, så sammanfogningen kommer inte att öka antalet rader heller. Så det finns egentligen inget syfte med att göra detta gå med.