MySQL में कार्डिनैलिटी क्या है? कृपया सरल, गैर-तकनीकी भाषा में समझाएं।
यदि किसी तालिका का सूचकांक विवरण group_id
11 के रूप में किसी क्षेत्र की कार्डिनैलिटी को प्रदर्शित करता है , तो इसका क्या अर्थ है?
MySQL में कार्डिनैलिटी क्या है? कृपया सरल, गैर-तकनीकी भाषा में समझाएं।
यदि किसी तालिका का सूचकांक विवरण group_id
11 के रूप में किसी क्षेत्र की कार्डिनैलिटी को प्रदर्शित करता है , तो इसका क्या अर्थ है?
जवाबों:
मैक्स कार्डिनैलिटी: सभी मूल्य अद्वितीय हैं
न्यूनतम हृदयता: सभी मूल्य समान हैं
कुछ स्तंभों को उच्च-कार्डिनलिटी कॉलम कहा जाता है क्योंकि उनके पास जगह में अड़चनें होती हैं (जैसे अद्वितीय) आपको प्रत्येक पंक्ति में समान मूल्य डालने से रोकते हैं।
कार्डिनैलिटी एक संपत्ति है जो डेटा को क्लस्टर, सॉर्ट और सर्च करने की क्षमता को प्रभावित करती है। यह इसलिए DBs में क्वेरी प्लानर्स के लिए एक महत्वपूर्ण माप है, यह एक अनुमान है जो वे सबसे अच्छी योजनाओं को चुनने के लिए उपयोग कर सकते हैं।
निम्नानुसार विकिपीडिया SQL में कार्डिनैलिटी को सारांशित करता है:
में एसक्यूएल (स्ट्रक्चर्ड क्वेरी लैंग्वेज), अवधि प्रमुखता को संदर्भित करता है विशिष्टता एक की एक विशेष कॉलम (विशेषता) में निहित डेटा मूल्यों के डेटाबेस तालिका । कार्डिनलिटी कम, एक कॉलम में अधिक डुप्लिकेट तत्व। इस प्रकार, सबसे कम संभव कार्डिनैलिटी वाले कॉलम में हर पंक्ति के लिए समान मूल्य होगा। SQL डेटाबेस कार्डिनैलिटी का उपयोग किसी दिए गए क्वेरी के लिए इष्टतम क्वेरी प्लान निर्धारित करने में मदद करने के लिए करते हैं।
यह सूचकांक में अद्वितीय मूल्यों की संख्या का अनुमान है।
एकल प्राथमिक कुंजी कॉलम वाली तालिका के लिए, कार्डिनैलिटी सामान्य रूप से तालिका में पंक्तियों की संख्या के बराबर होनी चाहिए।
यह मूल रूप से कामी द्वारा जुड़े विकिपीडिया लेख के अनुसार एक कॉलम के मूल्यों की विशिष्टता के साथ जुड़ा हुआ है।
क्यों विचार करना महत्वपूर्ण है कि यह अनुक्रमण रणनीति को प्रभावित करता है। केवल 2 संभावित मूल्यों के साथ एक कम कार्डिनैलिटी कॉलम इंडेक्सिंग के लिए बहुत कम बिंदु होंगे क्योंकि इंडेक्स का उपयोग करने के लिए पर्याप्त चयनात्मक नहीं होगा।
उच्च कार्डिनलिटी, बेहतर पंक्तियों का भेदभाव है। विभेदीकरण डेटा प्राप्त करने के लिए कम शाखाओं को नेविगेट करने में मदद करता है।
इसलिए उच्च सौहार्दता मूल्यों का अर्थ है:
गणितीय शब्दों में, कार्डिनैलिटी मूल्यों के एक सेट में मूल्यों की गिनती है। एक सेट में केवल अनन्य मान हो सकते हैं। एक उदाहरण "ए" सेट होगा।
सेट "A" होने दें: A = {1,2,3} - उस सेट की कार्डिनैलिटी है | 3 |
यदि "A" में 5 मान A = {10,21,33,42,57} हैं, तो कार्डिनलिटी 5% है।
Mysql के संदर्भ में इसका मतलब यह है कि टेबल कॉलम की कार्डिनैलिटी उस कॉलम के अद्वितीय मूल्यों की गिनती है। यदि आप अपने प्राथमिक कुंजी कॉलम (उदाहरण के लिए। Table.id) की कार्डिनैलिटी को देख रहे हैं, तो उस कॉलम की कार्डिनैलिटी आपको बताएगी कि टेबल में कितनी पंक्तियाँ हैं, क्योंकि टेबल में प्रत्येक पंक्ति के लिए एक विशिष्ट आईडी है। आपको उस तालिका पर "COUNT (*)" प्रदर्शन करने की ज़रूरत नहीं है, यह जानने के लिए कि उसमें कितनी पंक्तियाँ हैं, बस कार्डिनलिटी देखें।
से मैनुअल :
प्रमुखता
सूचकांक में अद्वितीय मूल्यों की संख्या का अनुमान। इसे ANALYZE TABLE या myisamchk -a चलाकर अपडेट किया गया है। कार्डिनैलिटी को पूर्णांक के रूप में संग्रहीत आँकड़ों के आधार पर गिना जाता है, इसलिए मूल्य आवश्यक रूप से छोटी तालिकाओं के लिए भी सटीक नहीं है। कार्डिनैलिटी जितनी अधिक होती है, उतनी अधिक संभावना होती है कि MySQL इंडेक्स में शामिल होने पर उपयोग करता है।
और पेरकोना से एक विश्लेषण :
CREATE TABLE `antest` (
`i` int(10) unsigned NOT NULL,
`c` char(80) default NULL,
KEY `i` (`i`),
KEY `c` (`c`,`i`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
mysql> select count(distinct c) from antest;
+-------------------+
| count(distinct c) |
+-------------------+
| 101 |
+-------------------+
1 row in set (0.36 sec)
mysql> select count(distinct i) from antest;
+-------------------+
| count(distinct i) |
+-------------------+
| 101 |
+-------------------+
1 row in set (0.20 sec)
mysql> select count(distinct i,c) from antest;
+---------------------+
| count(distinct i,c) |
+---------------------+
| 10201 |
+---------------------+
1 row in set (0.43 sec)
mysql> show index from antest;
+--------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
+--------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| antest | 1 | i | 1 | i | A | NULL | NULL | NULL | | BTREE | |
| antest | 1 | c | 1 | c | A | NULL | NULL | NULL | YES | BTREE | |
| antest | 1 | c | 2 | i | A | NULL | NULL | NULL | | BTREE | |
+--------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
3 rows in set (0.00 sec)
mysql> analyze table sys_users;
+--------------------------------+---------+----------+----------+
| Table | Op | Msg_type | Msg_text |
+--------------------------------+---------+----------+----------+
| antest | analyze | status | OK |
+--------------------------------+---------+----------+----------+
1 row in set (0.01 sec)
mysql> show index from antest;
+--------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
+--------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| antest | 1 | i | 1 | i | A | 101 | NULL | NULL | | BTREE | |
| antest | 1 | c | 1 | c | A | 101 | NULL | NULL | YES | BTREE | |
| antest | 1 | c | 2 | i | A | 10240 | NULL | NULL | | BTREE | |
+--------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
3 rows in set (0.01 sec)