मेरे पास 10 मीटर पंक्तियों वाला एक बड़ा टेबल है। और मुझे प्रत्येक पंक्ति के लिए कुछ सांख्यिकीय मूल्य प्राप्त करने की आवश्यकता है। मेरे पास ऐसा फ़ंक्शन है जो इस मान को उत्पन्न करता है, उदाहरण के लिए GetStatistic(uuid)
। यह काम करता है बहुत धीमी गति से काम करता है और परिणाम मूल्य बार नहीं बदलता है, इसलिए मैं अपने कॉलम खोजें Statistic
बना लिया है, और एक दिन में एक बार इस तरह क्वेरी निष्पादित करें:पोस्टग्रेस्क्ल। Paralell में अद्यतन क्वेरी चला सकते हैं?
UPDATE MyTable SET Statistic = GetStatistic(ID);
और चुनिंदा प्रश्नों में मैं GetStatistic
बुला बिना स्तंभ Statistic
का उपयोग कार्य करता है।
समस्या यह है कि मेरे उत्पादन सर्वर में 64 सीपीयू और बहुत सारी मेमोरी है, इसलिए लगभग सभी डीबी को रैम में कैश किया जा सकता है, लेकिन यह क्वेरी केवल एक सीपीयू का उपयोग करती है और निष्पादित करने के लिए 2 या 3 घंटे की आवश्यकता होती है।
GetStatistic फ़ंक्शन उपयोग तालिका, जो अद्यतन क्वेरी के सभी निष्पादन के दौरान निरंतर हैं। क्या मैं सभी उपलब्ध सीपीयू का उपयोग करके अलग-अलग पंक्तियों के लिए पैराल में गेटस्टैटिस्टिक की गणना करने के लिए पोस्टग्रे प्राप्त करने के लिए क्वेरी संशोधित कर सकता हूं?
फ़ंक्शन का उपयोग क्यों करें, क्या ऐसा कुछ भी है जो सादे एसक्यूएल द्वारा पूरा नहीं किया जा सकता है? क्या फ़ंक्शन को केवल वर्तमान पंक्ति से मानों की आवश्यकता होती है, या इसमें डेटा के अन्य स्रोत भी शामिल हैं (: = टेबल)? बीटीडब्ल्यू: हमें समारोह दिखाएं। – wildplasser
इस क्वेरी की योजना की जांच करें, आप देखेंगे कि इस फ़ंक्शन को 10 एम बार कहा जाता है। हो सकता है कि इसे शुद्ध एसक्यूएल में लिखना बेहतर होगा और यह बहुत तेज हो सकता है। –