इस ब्लॉग में एक अच्छा विवरण है:https://www.percona.com/blog/2007/08/28/to-sql_calc_found_rows-or-not-to-sql_calc_found_rows/
प्रदर्शन से पता चलता है कि हाँ, SQL_CALC_FOUND_ROWS का उपयोग करना प्रदर्शन के लिए बहुत खराब है जब आप इसे किसी बड़े टेबल पर उपयोग करते हैं।
अक्सर दो प्रश्नों को अलग-अलग चलाना बेहतर होता है:
/* 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
वैसे, यह SQL_CALC_FOUND_ROWS मुद्दे से संबंधित नहीं है, लेकिन मुझे आश्चर्य है कि आप main_members
में क्यों शामिल हो रहे हैं मेज़। आप इससे कोई कॉलम नहीं ला रहे हैं। लेफ्ट जॉइन का मतलब है कि यह पंक्तियों को प्रतिबंधित नहीं करेगा। यदि मैं स्तंभ नामों से तालिका संबंध का अनुमान लगा सकता हूं, तो main_members
में केवल एक पंक्ति हो सकती है main_articles
. में प्रत्येक पंक्ति के लिए , इसलिए शामिल होने से पंक्तियों की संख्या में वृद्धि नहीं होगी। तो वास्तव में ऐसा करने का कोई उद्देश्य नहीं है।