MySQL में कार्डिनैलिटी क्या है?


106

MySQL में कार्डिनैलिटी क्या है? कृपया सरल, गैर-तकनीकी भाषा में समझाएं।

यदि किसी तालिका का सूचकांक विवरण group_id11 के रूप में किसी क्षेत्र की कार्डिनैलिटी को प्रदर्शित करता है , तो इसका क्या अर्थ है?

जवाबों:


120

मैक्स कार्डिनैलिटी: सभी मूल्य अद्वितीय हैं

न्यूनतम हृदयता: सभी मूल्य समान हैं

कुछ स्तंभों को उच्च-कार्डिनलिटी कॉलम कहा जाता है क्योंकि उनके पास जगह में अड़चनें होती हैं (जैसे अद्वितीय) आपको प्रत्येक पंक्ति में समान मूल्य डालने से रोकते हैं।

कार्डिनैलिटी एक संपत्ति है जो डेटा को क्लस्टर, सॉर्ट और सर्च करने की क्षमता को प्रभावित करती है। यह इसलिए DBs में क्वेरी प्लानर्स के लिए एक महत्वपूर्ण माप है, यह एक अनुमान है जो वे सबसे अच्छी योजनाओं को चुनने के लिए उपयोग कर सकते हैं।


10
बड़े शब्दों के लिए इस बुत के साथ क्या है। "विशिष्टता" ठीक काम करेगा यह नहीं है?
पैशियर

8
@ स्पेसर: हां, हालांकि मुझे लगता है कि डेटाबेस पर काम करने वाले लोग पहले से ही रिलेशनल थ्योरी, सेट थ्योरी और गणित से काफी परिचित हैं। और उन्होंने निर्धारित सिद्धांत से शब्द उधार लिया: en.m.wikipedia.org/wiki/Cardinality
अलेक्जेंडर टॉर्टलिंग

27
@ स्पेसर, डिस्टिंक्टनेस एक बड़ा शब्द है (1 से)
ड्रू

4
@ ड्र्यू;) अगर लेक्सेस की तुलना न करें।
पचेरियर

8
@ स्पेसर लेक्मे? "विशिष्टता" वहाँ भी काम करेगा, है ना? ;) अगर हम पर्याप्त मेहनत करते हैं, तो हम पूरी भाषा को केवल 1 शब्द तक कम कर सकते हैं और खुद को अलग-अलग दोहराव और ठहराव के माध्यम से व्यक्त कर सकते हैं।
जेसन

34

निम्नानुसार विकिपीडिया SQL में कार्डिनैलिटी को सारांशित करता है:

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


25

यह सूचकांक में अद्वितीय मूल्यों की संख्या का अनुमान है।

एकल प्राथमिक कुंजी कॉलम वाली तालिका के लिए, कार्डिनैलिटी सामान्य रूप से तालिका में पंक्तियों की संख्या के बराबर होनी चाहिए।

अधिक जानकारी


15

यह मूल रूप से कामी द्वारा जुड़े विकिपीडिया लेख के अनुसार एक कॉलम के मूल्यों की विशिष्टता के साथ जुड़ा हुआ है।

क्यों विचार करना महत्वपूर्ण है कि यह अनुक्रमण रणनीति को प्रभावित करता है। केवल 2 संभावित मूल्यों के साथ एक कम कार्डिनैलिटी कॉलम इंडेक्सिंग के लिए बहुत कम बिंदु होंगे क्योंकि इंडेक्स का उपयोग करने के लिए पर्याप्त चयनात्मक नहीं होगा।


4
यदि आप किसी कॉलम को इंडेक्स करने के लिए समझ में आता है तो दूसरा पैराग्राफ महत्वपूर्ण है।
VMC

10

उच्च कार्डिनलिटी, बेहतर पंक्तियों का भेदभाव है। विभेदीकरण डेटा प्राप्त करने के लिए कम शाखाओं को नेविगेट करने में मदद करता है।

इसलिए उच्च सौहार्दता मूल्यों का अर्थ है:

  • पढ़ने-प्रश्नों का बेहतर प्रदर्शन;
  • बड़ा डेटाबेस आकार;
  • राइट-क्वेरी का खराब प्रदर्शन, क्योंकि छिपे हुए इंडेक्स डेटा को अपडेट किया जा रहा है।

7

गणितीय शब्दों में, कार्डिनैलिटी मूल्यों के एक सेट में मूल्यों की गिनती है। एक सेट में केवल अनन्य मान हो सकते हैं। एक उदाहरण "ए" सेट होगा।

सेट "A" होने दें: A = {1,2,3} - उस सेट की कार्डिनैलिटी है | 3 |

यदि "A" में 5 मान A = {10,21,33,42,57} हैं, तो कार्डिनलिटी 5% है।

Mysql के संदर्भ में इसका मतलब यह है कि टेबल कॉलम की कार्डिनैलिटी उस कॉलम के अद्वितीय मूल्यों की गिनती है। यदि आप अपने प्राथमिक कुंजी कॉलम (उदाहरण के लिए। Table.id) की कार्डिनैलिटी को देख रहे हैं, तो उस कॉलम की कार्डिनैलिटी आपको बताएगी कि टेबल में कितनी पंक्तियाँ हैं, क्योंकि टेबल में प्रत्येक पंक्ति के लिए एक विशिष्ट आईडी है। आपको उस तालिका पर "COUNT (*)" प्रदर्शन करने की ज़रूरत नहीं है, यह जानने के लिए कि उसमें कितनी पंक्तियाँ हैं, बस कार्डिनलिटी देखें।


4

एक सरल तरीके से, कार्डिनैलिटी तालिका के भीतर पंक्तियों या ट्यूपल्स की संख्या है। स्तंभों की संख्या को "डिग्री" कहा जाता है


4

से मैनुअल :

प्रमुखता

सूचकांक में अद्वितीय मूल्यों की संख्या का अनुमान। इसे 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)

1
इस उत्तर में शून्य सामग्री है जो आपने खुद लिखी है, यह MySQL मैनुअल और आपके द्वारा लिंक किए गए ब्लॉग पोस्ट से सिर्फ एक कोलाज है। और बुरी तरह से उस के ऊपर स्वरूपित है।
सिगुजा

1
अब यह स्पष्ट रूप से सूत्रों का कहना है और यह बेहतर स्वरूपित है।
कार्ला
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.