आपकी धारणा झूठी है; सबक्वेरी केवल एक बार निष्पादित की जाएगी। शामिल होने की तुलना में इसके धीमे होने का कारण यह है कि IN
अनुक्रमणिका का लाभ नहीं उठा सकते; इसे हर बार WHERE
. के लिए अपने तर्कों को एक बार स्कैन करना होगा क्लॉज का मूल्यांकन किया जाता है, यानी तालिका ए में प्रति पंक्ति एक बार। आप केवल IN
. को बदलकर, चर या संग्रहीत कार्यविधियों का उपयोग किए बिना, क्वेरी को अनुकूलित कर सकते हैं शामिल होने के साथ, इस प्रकार:
SELECT tableA.field1, tableA.field2, [...]
FROM tableA
INNER JOIN tableB ON tableA.id = tableB.id
जब तक आपको दोनों तालिकाओं से प्रत्येक फ़ील्ड को वापस लेने में कोई आपत्ति नहीं है, आपको SELECT
में अपने इच्छित फ़ील्ड की गणना करने की आवश्यकता है खंड; tableA.*
, उदाहरण के लिए, एक सिंटैक्स त्रुटि प्राप्त करेगा।