अपने स्वयं के शोध से (लेकिन मैं कोई विशेषज्ञ डीबीए नहीं हूं) मैंने सीखा है कि कंपाउंड की इंडेक्स का क्रम तय करते समय दो बातों पर विचार करना चाहिए।
सबसे पहले, कॉलम की कार्डिनैलिटी के संबंध में, इंडेक्स आमतौर पर उच्च कार्डिनैलिटी वाले कॉलम खोजने में बेहतर होते हैं। इसलिए मैं इंडेक्स में सबसे पहले उच्चतम कार्डिनैलिटी वाले कॉलम को रखने के लिए इच्छुक हूं। संदर्भ के लिए, MySQL Query Optimization शीर्षक वाला एक लेख है। जो कहता है:
आपके मामले में, _id
कॉलम स्पष्ट रूप से उस परिभाषा में बेहतर फिट होंगे, इस प्रकार वे कुंजी के उपसर्ग होने के लिए बेहतर उम्मीदवार हैं।
विचार करने की एक और बात इन अनुक्रमितों की पुन:प्रयोज्यता होगी। अधिकांश (यदि सभी नहीं) डेटाबेस सिस्टम एक कंपाउंड कुंजी के उपसर्ग को पुन:उपयोग करने की अनुमति देते हैं। उदाहरण के लिए, (owner_id, owner_type)
. पर एक कंपाउंड कुंजी owner_id
. पर प्रश्नों द्वारा भी उपयोग किया जा सकता है लेकिन owner_type
. पर नहीं .
तो आपने अपने प्रश्न में जो समझाया है उससे आप दो इंडेक्स के साथ बेहतर हो सकते हैं:(owner_id, owner_type)
पर एक कंपाउंड की इंडेक्स और दूसरा (owner_type)
. पर ।
अंत में, यह वास्तव में आपके डेटासेट और प्रश्नों के लिए आता है। सबसे इष्टतम समाधान क्या है यह देखने के लिए विभिन्न कंपाउंड कुंजी ऑर्डरिंग का उपयोग करके कई परिदृश्यों, बेंचमार्क आज़माएं। साथ ही, यह न भूलें कि अनुक्रमणिका आपके टेबल पर लिखने का दंड लगाती है।
अपडेट करें :कंपाउंड की इंडेक्स के बारे में एक और लोकप्रिय SO प्रश्न भी है:
मुझे कंपोजिट इंडेक्स का उपयोग कब करना चाहिए?ए>