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

MySQL इंडेक्स कार्डिनैलिटी - प्रदर्शन बनाम स्टोरेज दक्षता

उच्च कार्डिनैलिटी का अर्थ है बेहतर पठन प्रदर्शन, क्योंकि परिभाषा के अनुसार, पढ़ने के लिए कम रिकॉर्ड हैं।

इस तरह की क्वेरी को प्रोसेस करने के लिए:

SELECT  *
FROM    mytable
WHERE   indexed_col = @myvalue

, इंजन को निम्न चरणों का पालन करना चाहिए:

  1. शर्त को पूरा करने वाली पहली प्रविष्टि खोजें।

    यह B-Tree . को पार करते हुए किया जाता है , रूट एंट्री से शुरू।

    सभी पृष्ठों पर, B-Tree . का अनुसरण करके खोज की जाती है कड़ियाँ; एक पृष्ठ के भीतर, बाइनरी खोज का उपयोग करके खोज की जाती है (जब तक कि आपकी कुंजियाँ संकुचित न हों, इस स्थिति में यह एक रेखीय खोज है)।

    यह एल्गोरिथ्म उच्च कार्डिनैलिटी और कम कार्डिनैलिटी कॉलम दोनों के लिए समान दक्षता रखता है। पहला 3 ढूँढना (किसी भी 3 . के विपरीत ) इन सूचियों में:

    1  2  3  4  5  6  7  8  9  10
    
    3  3  3  3  3  3  3  3  4  4
    

    एक ही O(log(n)) की आवश्यकता है कदम।

  2. प्रमुख मान में परिवर्तन होने तक इंडेक्स को ट्रैवर्स करना। इसके लिए, निश्चित रूप से, रैखिक समय की आवश्यकता होती है:आपके पास जितने अधिक रिकॉर्ड होंगे, आपको उतना ही अधिक पार करने की आवश्यकता होगी।

अगर आपको केवल पहला रिकॉर्ड चाहिए:

SELECT  *
FROM    mytable
WHERE   indexed_col = @myvalue
LIMIT 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. MYSQL डेटाबेस में सभी विदेशी कुंजियाँ छोड़ें

  2. MySQL 8.0 में क्या मॉनिटर करें?

  3. चार्ट.जेएस - mysql और php . का उपयोग करके डेटाबेस से डेटा प्राप्त करना

  4. मैक ओएस एक्स - पर्यावरण त्रुटि:mysql_config नहीं मिला

  5. समय () उदाहरण – MySQL