हमारे आवेदन में, हम ऑटोमोटिव इंजन प्रदर्शन पर डेटा एकत्र करते हैं - इंजन प्रकार के आधार पर इंजन प्रदर्शन पर मूल रूप से स्रोत डेटा, वाहन चल रहा है और इंजन डिज़ाइन। वर्तमान में, नई पंक्ति प्रविष्टियों का आधार एक इंजन ऑन-ऑफ अवधि है; हम इंजन राज्य में सक्रिय से निष्क्रिय और इसके विपरीत से परिवर्तन के आधार पर प्रदर्शन चर की निगरानी करते हैं। संबंधित engineState
तालिका इस प्रकार है:MySQL में, बड़ी तालिकाओं में शामिल होने के लिए सबसे प्रभावी क्वेरी डिज़ाइन क्या है, जिसमें शामिल होने के बीच कई रिश्ते हैं?
+---------+-----------+---------------+---------------------+---------------------+-----------------+
| vehicle | engine | engine_state | state_start_time | state_end_time | engine_variable |
+---------+-----------+---------------+---------------------+---------------------+-----------------+
| 080025 | E01 | active | 2008-01-24 16:19:15 | 2008-01-24 16:24:45 | 720 |
| 080028 | E02 | inactive | 2008-01-24 16:19:25 | 2008-01-24 16:22:17 | 304 |
+---------+-----------+---------------+---------------------+---------------------+-----------------+
एक विशिष्ट विश्लेषण के लिए, हम सक्रिय/निष्क्रिय इंजन राज्य की वर्तमान आधार मिनट की एक पंक्ति का विवरण स्तर, बजाय के आधार पर तालिका सामग्री का विश्लेषण करना चाहते हैं। इसके लिए, हम प्रत्येक अवधि में दिनांक-समय कॉलम पर productionMinute
और engineEvent
तालिकाओं का विश्लेषण कर रहे हैं और प्रत्येक अवधि के लिए एक पंक्ति के साथ एक सरल productionMinute
तालिका बनाने की सोच रहे हैं। इसलिए यदि हमारी अवधि की अवधि 2009-12-01 से 2010-02-28 तक है, तो हम 12 9,600 पंक्तियों के साथ एक नई तालिका तैयार करेंगे, जो कि तीन महीने की अवधि के लिए प्रत्येक दिन के प्रत्येक मिनट के लिए एक होगी। productionMinute
तालिका की पहली कुछ पंक्तियाँ:
+---------------------+
| production_minute |
+---------------------+
| 2009-12-01 00:00 |
| 2009-12-01 00:01 |
| 2009-12-01 00:02 |
| 2009-12-01 00:03 |
+---------------------+
तालिकाओं के बीच में शामिल होने के होगा:
engineState
:FROM engineState AS es LEFT JOIN productionMinute AS pm ON pm.production_minute >= es.state_start_time AND pm.production_minute <= es.event_end_time
यह शामिल होने हालांकि, कई पर्यावरण के मुद्दों लाता है तालिका में 5 मिलियन पंक्तियां हैं और
productionMinute
तालिका में 130,000 पंक्तियां हैं- जब
engineState
पंक्ति एक से अधिक मिनट तक फैलती है (यानी।es.state_start_time
औरes.state_end_time
के बीच का अंतर, एक मिनट से अधिक) है उदाहरण में मामला ऊपर है, कईproductionMinute
तालिका पंक्तियों है कि एक हीengineState
तालिका पंक्ति में शामिल हो रहे हैं - जब कोई दौरान आपरेशन में एक से अधिक इंजन है दिए गए मिनट, यह भी ऊपर के उदाहरण के अनुसार, कई
engineState
तालिका पंक्तियों एक भीproductionMinute
पंक्ति
करने में शामिल होने के हमारे तर्क का परीक्षण और केवल एक छोटी सी मेज निकालने का उपयोग कर (3 महीने की तुलना में एक दिन नहीं बल्कि productionMinute
तालिका के लिए) में क्वेरी उत्पन्न करने में एक घंटे लगते हैं। प्रदर्शन को बेहतर बनाने के लिए इस आइटम की खोज में ताकि डेटा के तीन महीने पूछने के लिए संभव हो, हमारे विचार engineEvent
से एक अस्थायी तालिका बनाना था, किसी भी तालिका डेटा को समाप्त करना जो विश्लेषण के लिए महत्वपूर्ण नहीं है, और इसमें शामिल होना अस्थायी तालिका productionMinute
तालिका में। हम विभिन्न जोड़ों के साथ प्रयोग करने की भी योजना बना रहे हैं - विशेष रूप से एक आंतरिक शामिल - यह देखने के लिए कि क्या प्रदर्शन में सुधार होगा या नहीं।
कई लोगों के साथ तालिकाओं में शामिल होने के लिए सबसे अच्छा क्वेरी डिज़ाइन क्या है: उपरोक्त उल्लिखित भविष्यवाणी के बीच कई रिश्ते क्या हैं? सबसे अच्छा शामिल प्रकार क्या है (बाएं/दाएं, भीतरी)?
एक ठोस उदाहरण है कि आप किस प्रकार की रिपोर्ट जेनरेट करने की कोशिश कर रहे हैं, इससे मदद मिलेगी। यह काफी संभव है कि आपको प्रति मिनट अवलोकन में विस्तार करने की आवश्यकता नहीं है और सीधे आपके परिणाम बना सकते हैं। साथ ही, आपके इंजनस्टेट टेबल पर आपके पास कौन से इंडेक्स हैं? – Martin
आपकी शिकायत संख्या 2 और 3 पर्यावरणीय मुद्दे नहीं हैं, वे डिजाइन मुद्दे हैं। मेरा मतलब यह है कि मैं उनमें से किसी के साथ कुछ भी गलत नहीं देख सकता - वे सच हैं क्योंकि आपने अपना डेटा इस तरह से रखा है। आपको यह वर्णन करने की आवश्यकता है कि आप इसे एक समस्या के रूप में क्यों देखते हैं और यह स्पष्ट करते हैं कि आपने जो भी लिखा है उससे आप क्या उम्मीद करते हैं (आप इसका अर्थपूर्ण अर्थ क्या करेंगे: डी)। – Unreason