2009-01-19 4 views
12

में कोड पुन: उपयोग और मॉड्यूलरिटी एसक्यूएल संग्रहीत प्रक्रिया प्रोग्रामिंग के लिए कोड पुन: उपयोग और मॉड्यूलैटरी एक अच्छा विचार है?एसक्यूएल

और यदि हां, तो इन सुविधाओं को SQL संग्रहीत प्रक्रिया कोड आधार में जोड़ने का सबसे अच्छा तरीका क्या है?

मैं आम तौर पर सामान्य और दोहराए गए कार्यों के लिए स्केलर मूल्यवान फ़ंक्शन बनाता हूं। मुझे लगता है कि यह मौजूदा प्रक्रियाओं के समान नई प्रक्रियाओं के विकास को आसान बनाता है, लेकिन यह भी बगट्रैकिंग और समस्या निवारण में बहुत मदद करता है।

प्रदर्शन समस्याओं के कारण, मैं तालिका मूल्यवान कार्यों से दूर रहने की कोशिश करता हूं।

अंगूठे का मेरा नियम यह है कि यदि यह गणना है, और इसका उपयोग कई स्थानों पर किया जाता है, तो मैं एक स्केलर मूल्यवान फ़ंक्शन बनाता हूं।

उत्तर

2

एसक्यूएल कोड पुन: उपयोग की बात करते समय आपको बहुत लचीलापन नहीं देता है। जब मैं गणना या अन्य कार्यों की बात करता हूं जो आमतौर पर तालिकाओं को संशोधित नहीं करते हैं तो मैं आमतौर पर फ़ंक्शन बना देता हूं। लेकिन सभी कार्यों में तालिकाओं को लिखना शामिल है और इस तरह की चीजें मैं आम तौर पर लेनदेन का बेहतर नियंत्रण पाने के लिए संग्रहीत प्रक्रिया का उपयोग करता हूं।

0

एप्लिकेशन पक्ष से इसे देखने का एक और तरीका है अपने SQL क्वेरी का पुन: उपयोग करने के लिए बाध्यकारी का उपयोग करना। लेकिन शायद यह नहीं है कि आप

1

पर देख रहे हैं, तो आप संग्रहित प्रोसेस को अधिक प्रबंधनीय हिस्सों में तोड़ने में मदद के लिए अलग संग्रहित प्रक्रियाओं में कोड तोड़ सकते हैं। आप सामान्य तर्क को तोड़ने के लिए भी ऐसा ही कर सकते हैं जो किसी फ़ंक्शन में काम नहीं करेगा। इसके बारे में सोचें निकालें विधि रीफैक्टरिंग के समान।

+0

कई बड़े लोगों में एक बड़े स्पैम को विभाजित करने में समस्या यह है कि उन्हें केवल एक स्तर पर घोंसला जा सकता है। – jandersson

+0

मुझे यकीन नहीं है कि मैं समझता हूं। केवल एक स्तर क्यों? – Ian1971

+0

मुझे नहीं पता क्यों, यह SQL सर्वर की एक सीमा है। यदि आप जिस प्रक्रिया को कॉल करते हैं, वह डेटा के लिए एक और प्रक्रिया कहता है, तो आप एक अस्थायी तालिका में निष्पादित नहीं कर सकते हैं। – jandersson

5

आपको यह पता चल जाएगा कि आपके प्रश्नों के भीतर कार्यों का उपयोग प्रदर्शन के लिए एक आपदा है। फ़ंक्शंस ऑप्टिमाइज़र के लिए एक ब्लैक बॉक्स बन जाता है, ताकि आप अपनी टेबल में बड़ी संख्या में पंक्तियों तक पहुंचने के बाद क्वेरी को वापस कॉल करने के लिए क्वेरी में फिर से कोडिंग कर सकें।

सामान्य गणनाओं से निपटने का एक बेहतर तरीका उन्हें ट्रिगर के साथ एक नए कॉलम में डालना है, या अपने सम्मिलित/अपडेट क्वेरी में डालना है। इस तरह आप गणना किए गए मूल्य को अनुक्रमित कर सकते हैं और इसे हर बार इसे समझने के बजाय इसे सीधे उपयोग कर सकते हैं।

0

इस पर अनुवर्ती करने के लिए, मैंने कुछ प्रदर्शन समस्याओं में भाग लिया, और ऐसा लगता है कि अनुकूलक फ़ंक्शन के अंदर कोड के लिए सही अनुक्रमणिका चुनने में सक्षम नहीं है।

तो मुझे प्रदर्शन समस्या को हल करने के लिए इंडेक्स संकेतों (कीवर्ड के साथ) का उपयोग करके सही अनुक्रमणिका निर्दिष्ट करना पड़ा।