निम्न क्वेरी में:WHERE क्लॉज में उपयोग किए जाने पर MySQL द्वारा कैश किए गए सबक्वायरीज़ हैं?
SELECT column_a, column_b FROM table_a WHERE
column_b IN (SELECT b_id FROM table_b)
सबक्वेरी SELECT b_id FROM table_b
एसक्यूएल पार्सर द्वारा कैश है, या यह (उदाहरण के लिए, PHP में) पहले से क्वेरी करने के लिए, एक चर के रूप में सहेज तेजी से हो सकता है, और उसके बाद उन मानों को एक CSV स्ट्रिंग के रूप में पास करें?
उदा।
EXPLAIN EXTENDED
का उपयोग कर पूरी तरह से प्रभाव सबक्वेरी पर निपटा वर्णन करने के लिए में
SELECT column_a, column_b FROM table_a WHERE
column_b IN (1,3,4,6,8,10,16,18)
एक सबक्वायरी के साथ 'IN' का उपयोग करना एक भयानक विचार है। आप यहां आने वाले परिणामों को प्राप्त करने से बेहतर हैं, क्योंकि क्वेरी अनिवार्य रूप से एक इक्विटी-जॉइन है। 'स्तंभ_ए चुनें, table_a से कॉल__बी table_b में शामिल हों column_b = b_id' –
@TimSeguine: यह एक भयानक विचार क्यों है? यदि 'table_b' एन: एम रिलेशन टेबल है, तो 'जॉइन' का उपयोग होने पर 'table_a' से कई पंक्तियां मिलेंगी। यह अवांछित हो सकता है। – naitsirch
@naitsirch यह एक बुरा विचार है क्योंकि MySQL पर निर्भर उप-सामानों के लिए खराब समर्थन है। यदि आप किसी भी तरह से उनसे बच सकते हैं, तो आपको शायद चाहिए। एक अच्छी तरह से चुने गए 'ग्रुप बाय' ज्यादातर समय के बाहरी परिणामों को समाप्त करता है। –