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

एक MySQL कंपाउंड इंडेक्स (WRT Rails Polymorphic Associations and STI) में चाबियों का निष्पादन क्रम

अपने स्वयं के शोध से (लेकिन मैं कोई विशेषज्ञ डीबीए नहीं हूं) मैंने सीखा है कि कंपाउंड की इंडेक्स का क्रम तय करते समय दो बातों पर विचार करना चाहिए।

सबसे पहले, कॉलम की कार्डिनैलिटी के संबंध में, इंडेक्स आमतौर पर उच्च कार्डिनैलिटी वाले कॉलम खोजने में बेहतर होते हैं। इसलिए मैं इंडेक्स में सबसे पहले उच्चतम कार्डिनैलिटी वाले कॉलम को रखने के लिए इच्छुक हूं। संदर्भ के लिए, MySQL Query Optimization शीर्षक वाला एक लेख है। जो कहता है:

आपके मामले में, _id कॉलम स्पष्ट रूप से उस परिभाषा में बेहतर फिट होंगे, इस प्रकार वे कुंजी के उपसर्ग होने के लिए बेहतर उम्मीदवार हैं।

विचार करने की एक और बात इन अनुक्रमितों की पुन:प्रयोज्यता होगी। अधिकांश (यदि सभी नहीं) डेटाबेस सिस्टम एक कंपाउंड कुंजी के उपसर्ग को पुन:उपयोग करने की अनुमति देते हैं। उदाहरण के लिए, (owner_id, owner_type) . पर एक कंपाउंड कुंजी owner_id . पर प्रश्नों द्वारा भी उपयोग किया जा सकता है लेकिन owner_type . पर नहीं .

तो आपने अपने प्रश्न में जो समझाया है उससे आप दो इंडेक्स के साथ बेहतर हो सकते हैं:(owner_id, owner_type) पर एक कंपाउंड की इंडेक्स और दूसरा (owner_type) . पर ।

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

अपडेट करें :कंपाउंड की इंडेक्स के बारे में एक और लोकप्रिय SO प्रश्न भी है:

मुझे कंपोजिट इंडेक्स का उपयोग कब करना चाहिए?



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. वर्डप्रेस - मैं लॉगिन नहीं कर सकता - wp_users तालिका में कुछ गड़बड़ है

  2. कैसे स्वचालित रूप से mysql या JDBC में तालिकाओं में विदेशी कुंजी संदर्भ सम्मिलित करने के लिए?

  3. SQL INSERT... ऑटो-इन्क्रीमेंट के साथ चुनें DATETIME

  4. क्या SQL सर्वर के TIMESTAMP कॉलम जैसी कोई MySQL सुविधा है?

  5. पीएचपी पीडीओ बनाम सामान्य mysql_connect