यह एक अजीब बात है। मैं MySQL में दृश्यों का उपयोग करने की कोशिश कर रहा हूं (मैं साइबेज और एसक्यूएल सर्वर के साथ अधिक अनुभव के साथ MySQL के लिए बिल्कुल नया हूं)। इस नए प्रोजेक्ट का कोई भी तरीका हम MySQL का उपयोग कर रहे हैं क्योंकि ऐसा लगता है कि यह अच्छा प्रदर्शन है। हालांकि वेब फ्रंट एंड के लिए पूछताछ करने के लिए हमने कुछ विचार बनाने का फैसला किया, सभी अच्छी तरह से काम करते हैं, लेकिन वे हमेशा के लिए दौड़ते हैं।MySQL - दृश्य - सुपर धीमी क्वेरी
विचारों, बहुत सरल हैं सिर्फ चुनिंदा बयान (इन तालिकाओं उन में कुछ लाख पंक्तियाँ होती हैं)। उदाहरण के लिए कहें इस प्रश्न:
SELECT CAST(classifier_results.msgDate as DATE) AS mdate
,classifier_results.objClass AS objClass
,COUNT(classifier_results.objClass) AS obj
,classifier_results.subjClass AS subjClass
,COUNT(classifier_results.subjClass) AS subj
FROM classifier_results
WHERE (classifier_results.msgDate >= (curdate() - 20))
GROUP BY
CAST(classifier_results.msgDate as DATE)
,classifier_results.objClass
,classifier_results.subjClass
ORDER BY classifier_results.msgDate DESC
जब सामान्य चयन के रूप में चलाया जाता है तो परिणाम लौटने के लिए लगभग 1.5 सेकंड लगते हैं।
लेकिन जब इस क्वेरी के लिए एक दृश्य में डाल दिया है (के रूप में) - अर्थात
CREATE VIEW V1a_sentiment_AI_current AS
SELECT CAST(classifier_results.msgDate as DATE) AS mdate
,classifier_results.objClass AS objClass
,COUNT(classifier_results.objClass) AS obj
,classifier_results.subjClass AS subjClass
,COUNT(classifier_results.subjClass) AS subj
FROM classifier_results
WHERE (classifier_results.msgDate >= (curdate() - 20))
GROUP BY
CAST(classifier_results.msgDate as DATE)
,classifier_results.objClass
,classifier_results.subjClass
ORDER BY classifier_results.msgDate DESC
क्वेरी के बारे में 10 बार लंबे समय तक (22-30 सेकंड) लेता है। इसलिए मैं सोच रहा हूं कि कुछ अनुकूलन या क्वेरी कैशिंग है जो दृश्यों के साथ काम नहीं करती है या शायद कुछ सेटिंग है जिसे हमने MySQL कॉन्फ़िगरेशन में याद किया है। लेकिन क्या इस दृष्टिकोण को तेज करने का कोई तरीका है, इसलिए यह इस प्रश्न के लिए सिर्फ एक अच्छा प्लेसहोल्डर है?
चल रहा दो प्रश्नों पर व्याख्या: सामान्य चयन देता है:
1, सरल, classifier_results, सभी, idx_date,,,, 594,845, जहां का उपयोग करना; अस्थायी का उपयोग करना; filesort
का उपयोग करते हुए दृश्य का चयन देता है:
1, प्राथमिक, सभी,,,,, 100,
2, व्युत्पन्न, classifier_results, सभी, idx_date,,,, 594,845, का उपयोग करते हुए कहा पे; अस्थायी का उपयोग करना; filesort का उपयोग
यदि आप दोनों क्वेरी के लिए EXPLAIN का उपयोग करते हैं और दृश्य से चयन करते हैं, तो क्या आपको अलग-अलग परिणाम मिलते हैं? – Cocowalla
प्रश्न में जोड़ा गया। क्वेरी प्लान वही दिखता है, मुझे लगता है कि वें ईप्रिमरी सिर्फ दृश्य से वापसी है क्योंकि यह किसी अर्थ में घिरा हुआ है, कुछ भी नहीं जो 20 सेकंड्स + को इंगित करने के लिए अतिरिक्त इंगित करेगा .... – NightWolf
मुझे लगता है कि 'डेरिवेड' का अर्थ है कि यह अस्थायी उपयोग कर रहा है तालिका, जो प्रदर्शन को मार रही है – Cocowalla