प्राथमिक कुंजी स्वचालित रूप से MySQL में अनुक्रमित है?


243

क्या आपको स्पष्ट रूप से एक इंडेक्स बनाने की आवश्यकता है, या यह प्राथमिक कुंजी को परिभाषित करते समय निहित है? क्या जवाब माईसैम और इनोबीडी के लिए समान है?

जवाबों:


294

प्राथमिक कुंजी हमेशा अनुक्रमित होती है। यह MyISAM और InnoDB के लिए समान है, और आमतौर पर सभी भंडारण इंजनों के लिए सच है जो सभी सूचकांकों का समर्थन करता है।


5
यदि प्राथमिक कुंजी को हमेशा अनुक्रमित किया जाता है तो डेटाबेस आर्किटेक्चर / प्रदर्शन के बारे में बात करने वाले लोग हमेशा SQL नवागंतुकों को सलाह देते हैं कि "सुनिश्चित करें कि उनका डेटाबेस ठीक से अनुक्रमित है"?
टिम पीटरसन

35
@tim: वे लोगों को यह सुनिश्चित करने के लिए कह रहे हैं कि फ़िल्टरिंग, ग्रुपिंग या सॉर्टिंग के लिए उपयोग किए जाने वाले किसी भी अन्य कॉलम में भी सूचकांक हैं।
एमिल एच

15
जुड़ने को भी मत भूलना! अनुक्रमित फ़ील्ड गति चीजों को जोड़ते हैं।
जस्टजोन

31

Http://dev.mysql.com/doc/refman/5.0/en/constraint-primary-key.html के अनुसार ऐसा प्रतीत होगा कि यह निहित होगा


1
सवाल पूछने से पहले मैंने उस लिंक को खोजा। लेकिन इसका मतलब यह नहीं है कि मेरे लिए इस सवाल के बारे में बहुत कुछ है।
एलेक्स मिलर

इस उत्तर से जुड़ा पृष्ठ इस बारे में कुछ भी नहीं कहता है कि क्या प्राथमिक कुंजी भी एक सूचकांक है। @Fyrye से उत्तर में जुड़े पृष्ठ अधिक प्रासंगिक हैं।
जॉर्ज हॉकिन्स

16

हालांकि यह 2009 में पूछा गया था कि मुझे प्राथमिक कुंजियों पर MySQL प्रलेखन के लिए एक वास्तविक संदर्भ पोस्ट करना चाहिए। http://dev.mysql.com/doc/refman/5.5/en/optimizing-primary-keys.html

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

MySQL 5.0 संदर्भ के लिए देखें: http://dev.mysql.com/doc/refman/5.0/en/mysql-indmanes.html

अधिकांश MySQL इंडेक्स ( PRIMARY KEY , UNIQUE, INDEX, और FULLTEXT) B- ट्री में संग्रहीत हैं। अपवाद हैं कि स्थानिक डेटा प्रकारों पर अनुक्रमणिकाएँ आर-ट्री का उपयोग करती हैं, और यह कि मेमरी टेबल भी हैश इंडेक्स का समर्थन करती हैं।


11

प्राथमिक कुंजी को अनुमानित रूप से MyISAM और InnoDB दोनों के लिए अनुक्रमित किया गया है। प्राथमिक कुंजी का उपयोग करने वाली क्वेरी पर EXPLAIN का उपयोग करके आप इसे सत्यापित कर सकते हैं।


9

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


8

मुझे लगता है कि यह जवाब है

mysql> create table test(id int primary key, s varchar(20));
Query OK, 0 rows affected (0.06 sec)

mysql> show indexes from test \G
*************************** 1. row ***************************
        Table: test
   Non_unique: 0
     Key_name: PRIMARY
 Seq_in_index: 1
  Column_name: id
    Collation: A
  Cardinality: 0
     Sub_part: NULL
       Packed: NULL
         Null:
   Index_type: BTREE
      Comment:
Index_comment:
1 row in set (0.00 sec)

7

अनुक्रमणिका स्तंभों पर सबसे अच्छा उपयोग किया जाता है जो अक्सर जहां खंड में उपयोग किए जाते हैं, और किसी भी प्रकार की छंटाई में, जैसे कि "ऑर्डर द्वारा"। आप एक अधिक जटिल डेटाबेस पर काम कर रहे होंगे, इसलिए कुछ सरल नियमों को याद रखना अच्छा है।

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

  • अनुक्रमणिका वास्तव में केवल उन तालिकाओं के साथ काम में आती हैं जिनमें बहुत अधिक पंक्तियाँ होती हैं।

  • एक और बात याद रखना, कि हमारे कर्मचारी के डेटाबेस की स्थिति में एक चोर है, अगर स्तंभ एक चर लंबाई है, तो अनुक्रमित (साथ ही साथ अधिकांश MySQL) बहुत कम कुशलतापूर्वक प्रदर्शन करते हैं।

  • जुड़ने को भी मत भूलना! अनुक्रमित फ़ील्ड गति चीजों को जोड़ते हैं।


4

प्राथमिक कुंजी हमेशा स्वचालित रूप से अनुक्रमित और अद्वितीय होती है। इसलिए, अनावश्यक इंडेक्स बनाने से सावधान रहें।

उदाहरण के लिए, यदि आपने एक तालिका बनाई है

CREATE TABLE mytable (foo INT NOT NULL PRIMARY KEY, bar INT NOT NULL, baz INT NOT NULL,
  UNIQUE(foo), INDEX(foo)) ENGINE=InnoDB;

क्योंकि आप प्राथमिक कुंजी को अनुक्रमणित करना चाहते हैं और उस पर एक विशिष्टता बाधा लागू करते हैं, आप वास्तव में तीन अनुक्रमणिकाएँ बनाना चाहेंगे foo!


0

कोई प्राथमिक कुंजी स्तंभ के बारे में सोच सकता है क्योंकि प्राथमिक कुंजी की बाधाओं के साथ कोई भी अन्य अनुक्रमित स्तंभ अपने साथ लाता है।

अधिकांश उपयोग के मामलों में हमें प्राथमिक कुंजी और तालिका में अनुक्रमित स्तंभ / स्तंभ दोनों की आवश्यकता होती है, क्योंकि तालिका के लिए हमारी क्वेरीज़ स्तंभ / स्तंभों के आधार पर पंक्तियों को फ़िल्टर कर सकती हैं जो प्राथमिक कुंजी नहीं है, उस स्थिति में हम आमतौर पर उन स्तंभों / स्तंभों को अनुक्रमित करते हैं भी।

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