नीचे दी गई क्वेरी अस्थायी का उपयोग कर हटा देगी; फाइलसॉर्ट का उपयोग करना। व्याख्या से तो यह बेहतर तरीके से चलना चाहिए..
MySQL ऑप्टिमाइज़र गूंगा है इसलिए ट्रिक यह है कि ऑप्टिमाइज़र को आप चाहते हैं कि आप चाहते हैं और यह एक व्युत्पन्न तालिका है जो College.college_location =1 पर आधारित है। तो आप छात्र तालिका के साथ परिणाम में शामिल हो सकते हैं। और इस तरह MySQL सॉर्ट कुंजी का उपयोग कर सकता है
SELECT
*
FROM
student
INNER JOIN (
SELECT
college_id
FROM
college
WHERE
college.college_location = 1
) college
ON student.student_college = college.college_id
ORDER BY
student.countup DESC
, student.updated_time DESC
नए इंडेक्स को कैप्स लॉक में नोट करें
डेमो देखें http://sqlfiddle.com/#!2/05c8a/1
या आप इसका उपयोग कर सकते हैं यदि आपको लगता है कि यह अधिक समझ में आता है या पढ़ने में आसान है। प्रदर्शन समान होना चाहिए क्योंकि व्याख्या ने मुझे समझाया कि यह वही है।
SELECT
*
FROM (
SELECT
college_id
FROM
college
WHERE
college.college_location = 1
)
college
INNER JOIN
student
ON
student.student_college = college.college_id
ORDER BY
student.countup DESC
, student.updated_time DESC
डेमो देखें http://sqlfiddle.com/#!2/05c8a/23
नई रणनीति विभाजित और जीत की विधि डेटाबेस में अधिक क्वेरीज़ को सक्रिय करें जो सही अनुक्रमणिका का उपयोग करेगा। और एक अस्थायी तालिका और फ़ाइल सॉर्ट की आवश्यकता को हटा दें।
SET @college_ids = NULL;
SELECT
GROUP_CONCAT(college_id)
FROM
college
WHERE
college_location = 1
GROUP BY
college_location ASC
INTO @college_ids;
SELECT
*
FROM
student
WHERE
student.student_college IN(@college_ids)
ORDER BY
student.countup DESC
, student.updated_time DESC
;
डेमो देखें http://sqlfiddle.com/#!2/454b3/61