2010-03-10 27 views
8

MySQL में, अगर मैं दो स्तंभों पर एक अद्वितीय कुंजी बनाने के लिए, कहते हैं किmysql अद्वितीय कुंजी और सूचकांक

अद्वितीय कुंजी my_key (column1, column2)

यह आवश्यक है column1 पर एक अन्य प्रमुख निर्माण करने के लिए? मेरा लक्ष्य है कि कॉलम 1 और कॉलम 2 अद्वितीय होना है, और मैं कॉलम 1 द्वारा की गई बहुत सी चुनौतियों का पालन करूंगा।

+1

अभी एक्स्पलाइन का उपयोग करके एक प्रयोग किया है, ऐसा लगता है कि मुझे कॉलम 1 पर एक और कुंजी बनाने की ज़रूरत नहीं है, क्योंकि mysql कॉलम 1 द्वारा चुने गए चयन करते समय अनन्य कुंजी का उपयोग करेगा। – Beier

उत्तर

11

नहीं, यह आवश्यक नहीं है क्योंकि कॉलम 1 की अनुक्रमणिका के बजाय (कॉलम 1, कॉलम 2) पर एक इंडेक्स का उपयोग किया जा सकता है।

आप केवल कॉलम दो पर एक नई अनुक्रमणिका बनाना चाहते हैं, हालांकि इंडेक्स (कॉलम 1, कॉलम 2) केवल (कॉलम 2) के लिए खोज करते समय अच्छा नहीं है।

8

नहीं, आपकी my_key सूचकांक किसी भी प्रश्न का ख्याल column1 या शर्तों पर column1 और column2 पर ले जाता है। हालांकि, अगर आप केवल column2 पर प्रश्न पूछते हैं, तो आपको इसे कुशलता से पूछने में सक्षम होने के लिए column2 के लिए एक अतिरिक्त अनुक्रमणिका जोड़नी चाहिए।

इसके अलावा, अगर दोनों column1 और column2 अद्वितीय हैं, तो आप की तरह

[...] 
UNIQUE(column1), 
UNIQUE(column2), 
PRIMARY KEY (column1, column2); 

यह सुनिश्चित करता है कि दोनों column1 और column2 अद्वितीय हैं कुछ प्रयोग करने पर विचार करना चाह सकते हैं, और किसी भी प्रश्न केवल column1 का चयन करके और column2 हो सकता है इंडेक्स-केवल एक्सेस का उपयोग करके पुनर्प्राप्त।

2

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

संबंधित मुद्दे