(मुझे लगता है कि आप ids.customer_id = customer.customer_id
. टाइप करना चाहते थे और नहीं customer_ids.customer_id)
MySQL द्वारा ऑर्डर के बिना टाइप 10 (अनुक्रमित) के पहले 10 आईडी को पकड़ लिया, उनके लिए ग्राहक को देखा, और किया गया। (ध्यान दें कि यहां लेफ्ट जॉइन वास्तव में एक इनर जॉइन है क्योंकि जॉइन की शर्तें केवल उन पंक्तियों के लिए होंगी जिनका दोनों टेबलों में मिलान है)
ORDER BY mysql शायद सभी . को पुनः प्राप्त कर रहा है type=10 ग्राहक फिर उन्हें पहले नाम के आधार पर छाँटकर पहले 10 को खोजते हैं।
आप ग्राहक तालिका को असामान्य बनाकर (ग्राहक रिकॉर्ड में प्रकार की प्रतिलिपि बनाकर) या customer_id, name, type
रखने के लिए मैपिंग तालिका बनाकर इसे गति दे सकते हैं। टुपल्स किसी भी स्थिति में, (type, name)
. पर एक इंडेक्स जोड़ें . यदि मानचित्रण तालिका का उपयोग कर रहे हैं, तो इसका उपयोग ग्राहकों और आईडी के साथ तीन-तरफ़ा जुड़ने के लिए करें।
यदि टाइप =10 यथोचित रूप से सामान्य है, तो आप क्वेरी को ग्राहकों की तालिका में नाम से चलने के लिए बाध्य कर सकते हैं और प्रत्येक के लिए स्ट्रेट जॉइन के साथ प्रकार की जांच कर सकते हैं। यह एक कंपाउंड इंडेक्स जितना तेज़ नहीं होगा, लेकिन यह सभी मैचों को खींचने से तेज़ होगा।
और जैसा कि ऊपर सुझाव दिया गया है, MySQL द्वारा उपयोग की जा रही क्वेरी योजना को देखने के लिए अपनी क्वेरी पर एक EXPLAIN चलाएँ।