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

MySQL अनुक्रमणिका - सर्वोत्तम अभ्यास क्या हैं?

आपको निश्चित रूप से अनुक्रमण पर पढ़ने में कुछ समय बिताना चाहिए, इसके बारे में बहुत कुछ लिखा गया है, और यह समझना महत्वपूर्ण है कि क्या हो रहा है।

मोटे तौर पर, एक सूचकांक एक तालिका की पंक्तियों पर एक क्रम लगाता है।

सादगी के लिए, कल्पना कीजिए कि एक टेबल सिर्फ एक बड़ी सीएसवी फ़ाइल है। जब भी कोई पंक्ति डाली जाती है, तो उसे अंत में डाला जाता है . तो तालिका का "प्राकृतिक" क्रम केवल वह क्रम है जिसमें पंक्तियों को सम्मिलित किया गया था।

कल्पना कीजिए कि आपने CSV फ़ाइल को एक बहुत ही अल्पविकसित स्प्रेडशीट एप्लिकेशन में लोड किया है। यह सभी स्प्रैडशीट डेटा प्रदर्शित करती है, और पंक्तियों को क्रमिक क्रम में क्रमित करती है।

अब कल्पना करें कि आपको उन सभी पंक्तियों को खोजने की आवश्यकता है जिनका तीसरे कॉलम में कुछ मान "M" है। आपके पास जो उपलब्ध है उसे देखते हुए आपके पास केवल एक ही विकल्प है। आप प्रत्येक पंक्ति के लिए तीसरे कॉलम के मान की जाँच करने वाली तालिका को स्कैन करते हैं। यदि आपके पास बहुत सारी पंक्तियाँ हैं, तो इस विधि ("टेबल स्कैन") में लंबा समय लग सकता है!

अब कल्पना करें कि इस तालिका के अतिरिक्त, आपके पास एक अनुक्रमणिका है। यह विशेष सूचकांक तीसरे कॉलम में मूल्यों का सूचकांक है। इंडेक्स तीसरे कॉलम के सभी मानों को कुछ अर्थपूर्ण क्रम में सूचीबद्ध करता है (जैसे, वर्णानुक्रम में) और उनमें से प्रत्येक के लिए, पंक्ति संख्याओं की एक सूची प्रदान करता है जहां वह मान दिखाई देता है।

अब आपके पास उन सभी पंक्तियों को खोजने की एक अच्छी रणनीति है जहाँ तीसरे कॉलम का मान "M" है। उदाहरण के लिए, आप एक बाइनरी खोज कर सकते हैं। ! जबकि टेबल स्कैन के लिए आपको एन पंक्तियों को देखने की आवश्यकता होती है (जहां एन पंक्तियों की संख्या है), बाइनरी खोज के लिए केवल यह आवश्यक है कि आप सबसे खराब स्थिति में लॉग-एन इंडेक्स प्रविष्टियों को देखें। वाह, यह निश्चित रूप से बहुत आसान है!

बेशक, यदि आपके पास यह अनुक्रमणिका है, और आप तालिका में पंक्तियाँ जोड़ रहे हैं (अंत में, क्योंकि हमारी वैचारिक तालिका इसी तरह काम करती है), तो आपको हर बार अनुक्रमणिका को अद्यतन करने की आवश्यकता होती है। इसलिए जब आप नई पंक्तियाँ लिख रहे होते हैं तो आप थोड़ा और काम करते हैं, लेकिन जब आप कुछ खोज रहे होते हैं तो आप एक टन समय बचाते हैं।

इसलिए, सामान्य तौर पर, अनुक्रमण पठन दक्षता और लेखन दक्षता के बीच एक ट्रेडऑफ़ बनाता है। बिना अनुक्रमणिका के, सम्मिलन बहुत तेज़ हो सकते हैं - डेटाबेस इंजन केवल तालिका में एक पंक्ति जोड़ता है। जैसे ही आप इंडेक्स जोड़ते हैं, इंसर्ट करते समय इंजन को प्रत्येक इंडेक्स को अपडेट करना होगा।

दूसरी ओर, पढ़ना बहुत तेज हो जाता है।

उम्मीद है कि इसमें आपके पहले दो प्रश्न शामिल हैं (जैसा कि अन्य ने उत्तर दिया है - आपको सही संतुलन खोजने की आवश्यकता है)।

आपका तीसरा परिदृश्य थोड़ा और जटिल है। यदि आप LIKE का उपयोग कर रहे हैं, तो अनुक्रमण इंजन आमतौर पर आपकी पढ़ने की गति को पहले "%" तक बढ़ाने में मदद करेंगे। दूसरे शब्दों में, यदि आप 'फू% बार%' जैसे कॉलम का चयन कर रहे हैं, तो डेटाबेस इंडेक्स का उपयोग उन सभी पंक्तियों को खोजने के लिए करेगा जहां कॉलम "फू" से शुरू होता है, और फिर उस मध्यवर्ती रोसेट को स्कैन करने की आवश्यकता होती है सबसेट जिसमें "बार" है। चुनें ... जहां '% bar%' जैसे कॉलम इंडेक्स का उपयोग नहीं कर सकते हैं। मुझे आशा है कि आप देख सकते हैं क्यों।

अंत में, आपको एक से अधिक कॉलम पर इंडेक्स के बारे में सोचना शुरू करना होगा। अवधारणा समान है, और समान सामग्री के समान व्यवहार करती है - अनिवार्य रूप से, यदि आपके पास (ए, बी, सी) पर एक इंडेक्स है, तो इंजन इंडेक्स को बाएं से दाएं जितना अच्छा हो सके उपयोग करना जारी रखेगा। तो कॉलम पर एक खोज (ए, बी, सी) इंडेक्स का उपयोग कर सकती है, जैसा कि एक (ए, बी) पर होगा। हालांकि, यदि आप WHERE b=5 और c=1) खोज रहे हैं, तो इंजन को एक पूर्ण टेबल स्कैन करने की आवश्यकता होगी।

उम्मीद है कि यह थोड़ा प्रकाश डालने में मदद करता है, लेकिन मुझे यह दोहराना होगा कि इन चीजों को गहराई से समझाने वाले अच्छे लेखों के लिए खुदाई करने में कुछ घंटे खर्च करना सबसे अच्छा है। अपने विशेष डेटाबेस सर्वर के दस्तावेज़ों को पढ़ना भी एक अच्छा विचार है। क्वेरी प्लानर्स द्वारा इंडेक्स को लागू करने और उपयोग करने का तरीका काफी व्यापक रूप से भिन्न हो सकता है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. WEEKDAY () उदाहरण – MySQL

  2. SQL क्वेरी MySQL में तालिका बनाने के लिए

  3. MySQL में दो तिथियों के बीच अंतर

  4. शीर्ष 10 MySQL में सर्वोत्तम प्रथाओं

  5. PHP का उपयोग करके MySQL डेटाबेस का बैकअप / निर्यात कैसे करें