क्या आपको स्पष्ट रूप से एक इंडेक्स बनाने की आवश्यकता है, या यह प्राथमिक कुंजी को परिभाषित करते समय निहित है? क्या जवाब माईसैम और इनोबीडी के लिए समान है?
क्या आपको स्पष्ट रूप से एक इंडेक्स बनाने की आवश्यकता है, या यह प्राथमिक कुंजी को परिभाषित करते समय निहित है? क्या जवाब माईसैम और इनोबीडी के लिए समान है?
जवाबों:
प्राथमिक कुंजी हमेशा अनुक्रमित होती है। यह MyISAM और InnoDB के लिए समान है, और आमतौर पर सभी भंडारण इंजनों के लिए सच है जो सभी सूचकांकों का समर्थन करता है।
Http://dev.mysql.com/doc/refman/5.0/en/constraint-primary-key.html के अनुसार ऐसा प्रतीत होगा कि यह निहित होगा
हालांकि यह 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- ट्री में संग्रहीत हैं। अपवाद हैं कि स्थानिक डेटा प्रकारों पर अनुक्रमणिकाएँ आर-ट्री का उपयोग करती हैं, और यह कि मेमरी टेबल भी हैश इंडेक्स का समर्थन करती हैं।
प्राथमिक कुंजी को अनुमानित रूप से MyISAM और InnoDB दोनों के लिए अनुक्रमित किया गया है। प्राथमिक कुंजी का उपयोग करने वाली क्वेरी पर EXPLAIN का उपयोग करके आप इसे सत्यापित कर सकते हैं।
मुझे लगता है कि यह जवाब है
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)
अनुक्रमणिका स्तंभों पर सबसे अच्छा उपयोग किया जाता है जो अक्सर जहां खंड में उपयोग किए जाते हैं, और किसी भी प्रकार की छंटाई में, जैसे कि "ऑर्डर द्वारा"। आप एक अधिक जटिल डेटाबेस पर काम कर रहे होंगे, इसलिए कुछ सरल नियमों को याद रखना अच्छा है।
सूचकांक जहां गति और क्रम से गति करता है। याद रखें कि आपके तालिकाओं का निर्माण करते समय आपके डेटा का उपयोग कैसे किया जाता है। याद करने के लिए कुछ और चीजें हैं। यदि आपकी तालिका बहुत छोटी है, यानी केवल कुछ कर्मचारी, तो इसे छोड़ने के लिए एक इंडेक्स का उपयोग करना बदतर है और इसे टेबल स्कैन करने दें।
अनुक्रमणिका वास्तव में केवल उन तालिकाओं के साथ काम में आती हैं जिनमें बहुत अधिक पंक्तियाँ होती हैं।
एक और बात याद रखना, कि हमारे कर्मचारी के डेटाबेस की स्थिति में एक चोर है, अगर स्तंभ एक चर लंबाई है, तो अनुक्रमित (साथ ही साथ अधिकांश MySQL) बहुत कम कुशलतापूर्वक प्रदर्शन करते हैं।
जुड़ने को भी मत भूलना! अनुक्रमित फ़ील्ड गति चीजों को जोड़ते हैं।
प्राथमिक कुंजी हमेशा स्वचालित रूप से अनुक्रमित और अद्वितीय होती है। इसलिए, अनावश्यक इंडेक्स बनाने से सावधान रहें।
उदाहरण के लिए, यदि आपने एक तालिका बनाई है
CREATE TABLE mytable (foo INT NOT NULL PRIMARY KEY, bar INT NOT NULL, baz INT NOT NULL,
UNIQUE(foo), INDEX(foo)) ENGINE=InnoDB;
क्योंकि आप प्राथमिक कुंजी को अनुक्रमणित करना चाहते हैं और उस पर एक विशिष्टता बाधा लागू करते हैं, आप वास्तव में तीन अनुक्रमणिकाएँ बनाना चाहेंगे foo
!
कोई प्राथमिक कुंजी स्तंभ के बारे में सोच सकता है क्योंकि प्राथमिक कुंजी की बाधाओं के साथ कोई भी अन्य अनुक्रमित स्तंभ अपने साथ लाता है।
अधिकांश उपयोग के मामलों में हमें प्राथमिक कुंजी और तालिका में अनुक्रमित स्तंभ / स्तंभ दोनों की आवश्यकता होती है, क्योंकि तालिका के लिए हमारी क्वेरीज़ स्तंभ / स्तंभों के आधार पर पंक्तियों को फ़िल्टर कर सकती हैं जो प्राथमिक कुंजी नहीं है, उस स्थिति में हम आमतौर पर उन स्तंभों / स्तंभों को अनुक्रमित करते हैं भी।