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

ग्रुप बाय / ऑर्डर बाय के लिए MySQL इंडेक्स

इससे आपको मदद मिलनी चाहिए। अपनी क्वेरी को इस प्रकार दोबारा लिखें:

SELECT c1, Sum(c2) 
FROM table 
WHERE c4 = 2011 
AND c5 = 0 
AND c6 In (6,9,11)
AND c3 IS NOT NULL   
GROUP BY c1

अब उस क्रम में कॉलम के साथ कॉलम (सी 4, सी 5, सी 6) पर एक समग्र अनुक्रमणिका बनाएं। आपकी अनुक्रमणिका के कॉलम उसी क्रम में दिखाई देने चाहिए जैसे आपके WHERE क्लॉज के कॉलम। अन्यथा सूचकांक काम नहीं करेगा। इस सूचकांक की चयनात्मकता इतनी संकीर्ण है कि अस्थायी तालिका (समूह के लिए) पर एक फाइलसॉर्ट तेज होना चाहिए।

c3 को क्वेरी के अंत में ले जाने का कारण निम्नलिखित है। एक उदाहरण के रूप में, मान लें कि c3 0 और 100 के बीच मान ले सकता है (या यह NULL हो सकता है)। यदि आप "IS NOT NULL" क्वेरी चलाते हैं, तो MySQL को NULL के अनुरूप किनारों को छोड़कर लगभग सभी बी-ट्री इंडेक्स को पार करने की आवश्यकता है। इसलिए, MySQL तय करता है कि इंडेक्स में सभी अलग-अलग रास्तों से चलने की तुलना में एक पूर्ण टेबल स्कैन एक आसान विकल्प है। दूसरी ओर, आप देखेंगे कि यदि आपकी क्वेरी "IS NULL" थी और आपकी अनुक्रमणिका (c3, c4, c5, c6) थी, तो Mysql वास्तव में इस अनुक्रमणिका का उपयोग करेगा। ऐसा इसलिए है क्योंकि इस मामले में MySQL को केवल NULL मान के अनुरूप इंडेक्स ट्री के हिस्से को पार करने की आवश्यकता है।

MySQL को जिस तरह की अनुक्रमणिका की आवश्यकता है, वह प्रश्न में क्वेरी पर बहुत अधिक निर्भर है। जैसा कि @louis ने सुझाव दिया है, सभी स्तंभों पर अनुक्रमणिका बनाना एक अच्छा विचार नहीं है!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. किसी क्वेरी को छोड़कर उपयोग करते समय त्रुटि

  2. phpMyBackupPro - Linux के लिए एक वेब आधारित MySQL बैकअप टूल

  3. बाईं ओर योग SQL में शामिल हों

  4. डीबी में कोई तालिका मौजूद है या नहीं, यह जांचने में समस्याएं

  5. हाइबरनेट @SQLInsert और डुप्लिकेट कुंजी पर