Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

SQL_CALC_FOUND_ROWS क्वेरी का चयन करें जो 250000 रिकॉर्ड से बहुत धीमी है

इस ब्लॉग में एक अच्छा विवरण है: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 . में प्रत्येक पंक्ति के लिए , इसलिए शामिल होने से पंक्तियों की संख्या में वृद्धि नहीं होगी। तो वास्तव में ऐसा करने का कोई उद्देश्य नहीं है।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL:त्रुटि कोड:1118 पंक्ति का आकार बहुत बड़ा (> 8126)। कुछ कॉलम को टेक्स्ट या बीएलओबी में बदलना

  2. हाइबरनेट में एनम, एनम के रूप में बना रहता है

  3. डेटाबेस सुरक्षा - बैकअप एन्क्रिप्शन इन-ट्रांजिट और एट-रेस्ट

  4. RMySQL dbWriteTable फ़ील्ड के साथ। प्रकार

  5. ऐसे रिकॉर्ड कैसे प्राप्त करें जिनमें अल्फान्यूमेरिक वर्ण + सफेद-रिक्त स्थान हों