MySQL में, इस तरह एक सबक्वायरी करना एक "सहसंबद्ध क्वेरी" है। इसका मतलब है कि बाहरी SELECT
. के परिणाम आंतरिक SELECT
. के परिणाम पर निर्भर करता है . नतीजा यह है कि आपकी आंतरिक क्वेरी प्रति पंक्ति एक बार निष्पादित की जाती है, जो बहुत धीमी है।
आपको इस क्वेरी को दोबारा करना चाहिए; चाहे आप दो बार शामिल हों या दो प्रश्नों का उपयोग करें, ज्यादातर अप्रासंगिक है। दो बार शामिल होने से आपको मिलेगा:
SELECT something
FROM posts
INNER JOIN tag_map ON tag_map.id = posts.id
INNER JOIN tags ON tags.tag_id = tag_map.tag_id
WHERE tags.tag IN ('tag1', ...)
अधिक जानकारी के लिए, MySQL मैनुअल को उपश्रेणियों को जॉइन में बदलने पर देखें। ।
युक्ति:EXPLAIN SELECT
आपको दिखाएगा कि कैसे अनुकूलक आपकी क्वेरी को संभालने की योजना बना रहा है। अगर आपको DEPENDENT SUBQUERY
दिखाई देता है आपको रिफैक्टर करना चाहिए, ये मेगा-स्लो हैं।