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

जब मैं एक नया इंडेक्स जोड़ता हूं तो MySQL में किसी इंडेक्स की कार्डिनैलिटी अपरिवर्तित क्यों रहती है?

यदि आपके पास तालिका में केवल 1 पंक्ति है, तो निश्चित रूप से सूचकांक के लिए कार्डिनैलिटी 1 होनी चाहिए। यह सिर्फ अद्वितीय मूल्यों की संख्या गिन रहा है।

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

यहां बताया गया है कि यह कैसे काम करता है:जब आप कॉलम के एक सेट पर एक इंडेक्स बनाते हैं (a,b,c,d) , तो डेटाबेस तालिका में सभी पंक्तियों पर चला जाता है, प्रत्येक पंक्ति के लिए उन 4 स्तंभों के आदेशित चौगुनी को देखते हुए। मान लें कि आपकी तालिका इस तरह दिखती है:

a  b  c  d  e   
-- -- -- -- --  
1  1  1  1  200 
1  1  1  1  300
1  2  1  1  200
1  3  1  1  200

तो डेटाबेस जो देखता है वह सिर्फ 4 कॉलम है (ए, बी, सी, डी):

a  b  c  d  
-- -- -- --
1  1  1  1 
1  2  1  1 
1  3  1  1 

देखें कि केवल 3 अद्वितीय पंक्तियाँ शेष हैं? वे हमारी बाल्टी बन जाएंगे, लेकिन हम उस पर वापस आ जाएंगे। वास्तव में, तालिका में प्रत्येक पंक्ति के लिए एक रिकॉर्ड आईडी या पंक्ति पहचानकर्ता भी होता है। तो हमारी मूल तालिका इस तरह दिखती है:

(row id) a  b  c  d  e   
-------- -- -- -- -- --  
00000001 1  1  1  1  200 
00000002 1  1  1  1  300
00000003 1  2  1  1  200
00000004 1  3  1  1  200

तो जब हम (ए, बी, सी, डी) के केवल 4 कॉलम देखते हैं, तो हम वास्तव में पंक्ति आईडी को भी देख रहे हैं:

(row id) a  b  c  d 
-------- -- -- -- --
00000001 1  1  1  1
00000002 1  1  1  1
00000003 1  2  1  1
00000004 1  3  1  1

लेकिन हम (ए, बी, सी, डी) द्वारा लुकअप करना चाहते हैं और पंक्ति आईडी द्वारा नहीं, इसलिए हम कुछ इस तरह का उत्पादन करते हैं:

(a,b,c,d) (row id)
--------- --------
1,1,1,1   00000001
1,1,1,1   00000002
1,2,1,1   00000003
1,3,1,1   00000004

और अंत में, हम उन पंक्तियों की सभी पंक्ति आईडी को समूहित करते हैं जिनमें समान (a,b,c,d) मान एक साथ होते हैं:

(a,b,c,d) (row id)
--------- ---------------------
1,1,1,1   00000001 and 00000002
1,2,1,1   00000003
1,3,1,1   00000004

देखना है कि? (ए, बी, सी, डी) के मान, जो (1,1,1,1) (1,2,1,1) और (1,3,1,1) हैं, हमारे लुकअप टेबल की कुंजी बन गए हैं मूल तालिका की पंक्तियों में।

वास्तव में, इनमें से कुछ भी वास्तव में नहीं होता है, लेकिन यह आपको एक अच्छा विचार देना चाहिए कि किसी इंडेक्स का "बेवकूफ" (यानी सीधे-आगे) कार्यान्वयन कैसे किया जा सकता है।

लेकिन लब्बोलुआब यह है:कार्डिनैलिटी सिर्फ यह मापती है कि एक इंडेक्स में कितनी अनूठी पंक्तियाँ हैं। और हमारे उदाहरण में वह हमारी लुकअप तालिका में चाबियों की संख्या थी, जो कि 3 थी।

आशा है कि इससे मदद मिलेगी!



  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. थोक डालें और लौटाए गए आईडी लार्वा प्राप्त करें

  3. Mysql ड्रॉप पार्टीशन और ट्रंकेट पार्टीशन में क्या अंतर है

  4. पोस्ट करें और उसी समय php . में प्राप्त करें

  5. MAX और GROUP BY का उपयोग करके सभी संबंधित फ़ील्ड का चयन करना