मेरे पास कुछ तालिकाओं के जुड़ने के आधार पर एक दृश्य (viewX
) है:MySQL क्वेरी में हैविंग और कहां के बीच क्या अंतर है?
जब मैं WHERE
का उपयोग करता हूं, क्वेरी में देरी होती है, प्रोसेसर का उपयोग 50% तक जाता है और अंत में मुझे mysqld.exe
सेवा बंद करने और हल करने का प्रयास करने के लिए पुनरारंभ करने की आवश्यकता होती है फिर से समस्या
जब मैं HAVING
का उपयोग करता हूं, क्वेरी पूरी तरह से और जल्दी से निष्पादित होती है, तो मुझे परिणाम मिलते हैं और सभी तैयार हैं।
क्वेरी इस तरह है:
SELECT * FROM viewX WHERE column_of_view = 'foo'
SELECT * FROM viewX HAVING column_of_view = 'foo'
क्या हो रहा है?
मुझे मिला समाधान मुझे ऐसा कुछ करना है:
SELECT * FROM (SELECT * FROM viewX) as T WHERE column_of_view = 'foo'
SELECT * FROM (SELECT * FROM viewX) as T HAVING column_of_view = 'foo'
दोनों पंक्तियां ठीक काम करती हैं, लेकिन, मुझे लगता है कि यह खराब है! (चुनें * से (... व्यूएक्स) ????)
क्या आप कुछ निष्पादन योजनाएं पोस्ट कर सकते हैं? – Thilo
मेरा सबसे अच्छा अनुमान यह है कि हैविंग का उपयोग करके आप क्वेरी ऑप्टिमाइज़र को भ्रमित कर रहे हैं जैसे आप मुझे भ्रमित कर रहे हैं, और यह भ्रम एक अलग निष्पादन योजना (अलग-अलग क्रम और विधियों में शामिल) में परिणाम देता है, जो इस मामले में वास्तव में फायदेमंद हो सकता है कई शामिल होते हैं, एक उपोक्ततम क्रम में शामिल होने की संभावना बहुत बड़ी है)। क्या यह पहले कुछ पंक्तियों को तेज़ी से वापस कर देता है, या सभी पंक्तियों के लिए पूरी तरह से चुनिंदा है? – Thilo
यदि आप दोनों निर्दिष्ट करते हैं तो क्या होता है? – Thilo