2011-09-03 13 views
25

संग्रहीत प्रक्रियाओं और तैयार वक्तव्यों के बीच क्या अंतर है ... और कौन सा बेहतर है और क्यों ... !! मैं इसे गूगल करने की कोशिश कर रहा था लेकिन मुझे कोई बेहतर लेख नहीं मिला है ...संग्रहित प्रक्रियाओं और तैयार वक्तव्यों के बीच अंतर ..?

उत्तर

33

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

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

अंतर यह है कि आप तैयार बयान संग्रहित नहीं कर सकते हैं। आपको हर बार निष्पादित करने की आवश्यकता होने पर उन्हें "तैयार" करना होगा। दूसरी तरफ संग्रहीत प्रक्रियाओं को एक स्कीमा से जोड़ा जा सकता है, लेकिन आपको उन्हें लिखने के लिए पीएल/एसक्यूएल को जानने की जरूरत है।

आपको यह जांचना होगा कि आपका डीबीएमएस उनका समर्थन करता है या नहीं।

दोनों बहुत उपयोगी उपकरण हैं, आप गठबंधन करना चाहते हैं।

आशा है कि यह संक्षिप्त स्पष्टीकरण आपके लिए उपयोगी होगा!

10

डीबी में एक संग्रहीत प्रक्रिया संग्रहीत की जाती है - जिस पर डीबी (ओरेकल, एमएस एसक्यूएल सर्वर इत्यादि) संकलित और संभावित रूप से तैयार किया गया है जब आप इसे सर्वर पर बनाते हैं ...

एक तैयार कथन एक कथन है जो सर्वर द्वारा पार्स किया गया है और निष्पादन योजना सर्वर द्वारा निष्पादन के लिए तैयार की जाती है जब भी आप कथन चलाते हैं ... आमतौर पर यह समझ में आता है जब एक कथन एक से अधिक बार चलाया जाता है ... डीबी सर्वर (ओरेकल इत्यादि) के आधार पर और कभी-कभी कॉन्फ़िगरेशन विकल्प ये "तैयारी" या तो सत्र-विशिष्ट या "वैश्विक" होते हैं ...

कोई " शर्त ter "जब आप इन दोनों की तुलना करते हैं क्योंकि उनके पास उनके विशिष्ट उपयोग के मामले हैं ...

0

अन्य उत्तर इस की ओर संकेत किया है, लेकिन मैं पक्ष और विपक्ष स्पष्ट रूप से सूचीबद्ध करने के लिए करना चाहते हैं:

संग्रहित प्रक्रियाओं

पेशेवरों:

  1. प्रत्येक क्वेरी अधिक संसाधित किया जाता है एक सीधी क्वेरी से तेज़ी से, क्योंकि सर्वर उन्हें पूर्व-संकलित करता है।
  2. प्रत्येक क्वेरी को केवल एक बार लिखा जाना चाहिए। इसे विभिन्न सत्रों और विभिन्न कनेक्शनों में भी आवश्यकतानुसार कई बार निष्पादित किया जा सकता है।
  3. प्रोग्रामिंग संरचनाओं (जैसे लूप, सशर्त बयान, और त्रुटि हैंडलिंग) शामिल करने के लिए प्रश्नों को अनुमति देता है जो अकेले एसक्यूएल में लिखना असंभव या मुश्किल है।

कान्स

  1. जो कुछ भी प्रोग्रामिंग भाषा डेटाबेस सर्वर का उपयोग करता है के ज्ञान की आवश्यकता होती है।
  2. कभी-कभी उन्हें लिखने या उन्हें कॉल करने के लिए विशेष अनुमतियों की आवश्यकता हो सकती है।

तैयार वक्तव्य

पेशेवरों

  1. तरह संग्रहीत दिनचर्या, क्योंकि प्रश्नों पूर्व संकलित कर रहे हैं जल्दी कर रहे हैं।

कान्स

  1. आवश्यकता प्रत्येक कनेक्शन या सत्र के साथ फिर से लिखा जाना है।
  2. ओवरहेड के लायक होने के लिए, प्रत्येक तैयार कथन को एक से अधिक बार निष्पादित किया जाना चाहिए (जैसे लूप में)। यदि एक प्रश्न केवल एक बार निष्पादित किया जाता है, तो अधिक ओवरहेड तैयार कथन की तैयारी में जाता है जब आप सर्वर से SQL को संकलित करने की आवश्यकता होती है, लेकिन तैयार कथन भी बनाते हैं।

मेरे पैसे के लिए, मैं हर बार संग्रहित प्रक्रियाओं के साथ जाऊंगा क्योंकि उन्हें केवल एक बार लिखा जाना चाहिए। इसके बाद, प्रक्रिया के लिए प्रत्येक कॉल सहेजे गए समय की ओर जाता है, भले ही आप नए कनेक्शन पर हों या नहीं, और क्या आप प्रक्रिया को लूप में कॉल कर रहे हैं या नहीं। प्रोग्रामिंग भाषा सीखने में कुछ समय बिताने के लिए केवल नकारात्मक पक्ष की आवश्यकता है। अगर मुझे संग्रहीत प्रक्रियाओं को लिखने की अनुमति नहीं थी, तो मैं एक तैयार कथन का उपयोग करूंगा, लेकिन केवल तभी मुझे उसी सत्र में बार-बार एक ही क्वेरी करना पड़ता था।

यह निष्कर्ष है कि मैं इन दो संरचनाओं के बीच अंतर में कई महीनों के शोध के बाद आया हूं। यदि कोई भी खराब सामान्यीकरण को सही करने में सक्षम है, तो मैं प्रतिष्ठा के लिए किसी भी नुकसान के लायक होगा।

संबंधित मुद्दे