तो मैं कुछ बेहद बड़ी तालिकाओं से पूछताछ कर रहा हूं। वे इतने बड़े कारण हैं क्योंकि मौजूदा रिकॉर्ड अपडेट करने के बजाए पीपल्स सॉफ्ट कुछ डेटा में बदलाव किए जाने पर नए रिकॉर्ड डालता है। असल में, इसकी लेनदेन तालिका भी एक डेटा वेयरहाउस हैं।प्रभावी डेटा वाले डेटा के साथ विशाल डेटा गोदाम तालिकाओं के खिलाफ प्रश्नों को कैसे बढ़ाया जा सकता है?
यह सबसे हालिया/वर्तमान पंक्ति प्राप्त करने के लिए उन प्रश्नों की आवश्यकता है जो नेस्टेड चुनते हैं। वे दोनों प्रभावी दिनांकित हैं और प्रत्येक तारीख के भीतर (एक दिन में कास्ट) उनके पास एक प्रभावी अनुक्रम हो सकता है। इस प्रकार, आदेश user_id=123
के लिए मौजूदा रिकॉर्ड प्राप्त करने के लिए, मैं यह करने के लिए है:
select * from sometable st
where st.user_id = 123
and st.effective_date = (select max(sti.effective_date)
from sometable sti where sti.user_id = st.user_id)
and st.effective_sequence = (select max(sti.effective_sequence)
from sometable sti where sti.user_id = st.user_id
and sti.effective_date = st.effective_date)
इन तालिकाओं पर अनुक्रमणिका के एक अभूतपूर्व संख्या में हैं, और मैं कुछ और है कि मेरे प्रश्नों में तेजी लाने के हैं नहीं मिल सकता है ।
मेरे दिक्कत यह है कि मैं अक्सर कई बार हो सकता है 50 user_ids के लिए इन तालिकाओं से एक व्यक्ति के बारे में डेटा प्राप्त करना चाहते हैं, लेकिन जब मैं इन पीपुलसॉफ्ट टेबल के कुछ ही साथ उन में केवल कुछ ही रिकॉर्ड होने मेरी टेबल में शामिल होने, चीज़ें बस जाओ है अनुचित व्यवहार।
पीपुल्स सॉफ्ट टेबल दूरस्थ डेटाबेस पर हैं जो मैं डेटाबेस लिंक के माध्यम से उपयोग करता हूं। मेरे प्रश्न इस तरह दिखते हैं:
select st.* from local_table lt, [email protected] st
where lt.user_id in ('123', '456', '789')
and lt.user_id = st.user_id
and st.effective_date = (select max(sti.effective_date)
from [email protected] sti where sti.user_id = st.user_id)
and st.effective_sequence = (select max(sti.effective_sequence)
from [email protected] sti where sti.user_id = st.user_id
and sti.effective_date = st.effective_date)
जब मुझे अपनी स्थानीय तालिका के साथ कई पीपुल्स सॉफ्ट टेबल में शामिल होना होता है तो चीजें और भी बदतर होती हैं। प्रदर्शन सिर्फ अस्वीकार्य है।
प्रदर्शन में सुधार के लिए मैं कुछ चीजें क्या कर सकता हूं? मैंने यह सुनिश्चित करने के लिए क्वेरी संकेतों का प्रयास किया है कि मेरी स्थानीय तालिका पहले पीपल्स सॉफ्ट में अपने साथी से जुड़ गई है, इसलिए यह सही उपयोगकर्ता_आईडी को कम करने से पहले अपने सभी तालिकाओं में शामिल होने का प्रयास नहीं करता है। मैंने LEADING
संकेत की कोशिश की है और रिमोट डेटाबेस पर प्रसंस्करण को धक्का देने की कोशिश की गई संकेतों के साथ खिलवाड़ की है, लेकिन समझाया गया योजना अस्पष्ट है और केवल कई परिचालनों के लिए 'रिमोट' कहा गया था और मुझे नहीं पता था कि क्या हो रहा था।
मान लीजिए कि मेरे पास पीपल्स सॉफ्ट और मेरी टेबल का स्थान बदलने की शक्ति नहीं है, मेरी सबसे अच्छी पसंद का संकेत है? अगर मैं चार रिमोट टेबल के साथ एक स्थानीय टेबल में शामिल हो रहा था, और स्थानीय तालिका उनमें से दो के साथ जुड़ गई, तो मैं संकेत कैसे प्रारूपित करूं ताकि मेरी स्थानीय तालिका (जो बहुत छोटी है - वास्तव में, मैं सिर्फ एक इनलाइन दृश्य कर सकता हूं मेरी स्थानीय तालिका केवल उस उपयोगकर्ता_आईड्स के लिए है जिसमें मुझे रूचि है) पहले रिमोट वाले प्रत्येक के साथ जुड़ गया है?
संपादित करें: एप्लिकेशन को रीयल-टाइम डेटा की आवश्यकता है, दुर्भाग्यवश एक भौतिक दृश्य या कैशिंग डेटा की अन्य विधि पर्याप्त नहीं होगी।
+1, डीबी लिंक पर शामिल होने का सामना करने वाले किसी भी व्यक्ति को इसकी सराहना करने में सक्षम होना चाहिए। – DCookie
क्या आप इन प्रश्नों के लिए व्याख्या योजना पोस्ट कर सकते हैं? – APC
यदि आपका डीबी उत्सुक अपडेट का समर्थन करता है तो आप भौतिक दृश्यों का उपयोग करने में सक्षम हो सकते हैं। –