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

SELECT COUNT(*) धीमा है, यहां तक ​​कि क्लॉज के साथ भी

InnoDB संकुल प्राथमिक कुंजियों का उपयोग करता है, इसलिए प्राथमिक कुंजी को डेटा पृष्ठों में पंक्ति के साथ संग्रहीत किया जाता है, अलग-अलग अनुक्रमणिका पृष्ठों में नहीं। एक श्रेणी स्कैन करने के लिए आपको अभी भी डेटा पृष्ठों में सभी संभावित विस्तृत पंक्तियों के माध्यम से स्कैन करना होगा; ध्यान दें कि इस तालिका में एक टेक्स्ट कॉलम है।

मैं दो चीजों की कोशिश करूंगा:

  1. चलाएं optimize table . यह सुनिश्चित करेगा कि डेटा पृष्ठ भौतिक रूप से क्रमबद्ध क्रम में संग्रहीत हैं। यह एक संकुल प्राथमिक कुंजी पर एक रेंज स्कैन को संभावित रूप से तेज कर सकता है।
  2. केवल change_event_id कॉलम पर एक अतिरिक्त गैर-प्राथमिक अनुक्रमणिका बनाएं। यह उस कॉलम की एक कॉपी को इंडेक्स पेजों में स्टोर करेगा जो स्कैन करने के लिए बहुत तेज होगा। इसे बनाने के बाद, यह सुनिश्चित करने के लिए व्याख्या योजना देखें कि यह नई अनुक्रमणिका का उपयोग कर रहा है।

(आप भी संभवतः change_event_id कॉलम को बड़ा बनाना चाहते हैं अहस्ताक्षरित अगर यह शून्य से बढ़ रहा है)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. #1139 - regexp . से त्रुटि 'पुनरावृत्ति-संचालक संकार्य अमान्य' मिला

  2. LIKE क्लॉज होने पर इंडेक्सिंग का सबसे अच्छा प्रकार

  3. मुझे MySQL लेनदेन का उपयोग कब करना चाहिए?

  4. MySQL प्रश्नों में, कहां के बजाय शामिल हों का उपयोग क्यों करें?

  5. तालिका का नाम अपर केस में बदलें