2012-10-18 18 views
36

से तेज है क्यों मैं डेटाबेस से केवल एक मान का चयन करने के लिए एक साधारण एकल पंक्ति क्वेरी लिखना चाहता हूं।क्यों संग्रहीत प्रक्रिया क्वेरी

इसलिए यदि मैं सी # कोड में सरल चयन क्वेरी लिखने के बजाय इस क्वेरी के लिए संग्रहित प्रक्रियाएं लिखता हूं, तो मुझे यकीन है कि इस सरल चयन क्वेरी के लिए संग्रहीत प्रक्रिया तेज होगी लेकिन क्यों?

मैं संग्रहीत प्रक्रिया के साथ उलझन में हूं जो मेरे कोड में सरल क्वेरी लिख रहा है? मैं उलझन में हूं कि संग्रहीत प्रक्रिया सीधे कोड में लिखी गई सरल एक क्वेरी से तेज क्यों होती है?

+2

आपको लगता है कि संग्रहीत प्रक्रिया सीधे कोड में लिखी गई सरल एक क्वेरी से तेज क्यों है? –

+0

@ क्यूओंग ले मैंने Google से खोज की और पाया कि संग्रहित प्रक्रिया भी सरल क्वेरी से तेज है लेकिन स्पष्ट विचार नहीं मिला कि क्यों ?? –

+1

नीचे मेरा उत्तर देखें, दोनों के लिए प्रदर्शन बराबर, सामान्य झूठी मिथक लंबे समय तक –

उत्तर

74

संग्रहित प्रक्रियाओं एसक्यूएल कोड की तुलना में तेजी से कर रहे हैं की जरूरत है

यह एक मिथक है, प्रदर्शन हमेशा बराबर है, किताब से: Architecting Microsoft® .NET Solutions for the Enterprise:

एसक्यूएल एक भाषा है जिसके माध्यम से आप डेटाबेस पर निष्पादित करने के लिए संचालन (क्वेरी, अद्यतन, या प्रबंधन संचालन) के बारे में अपने इरादे घोषित करते हैं। डेटाबेस इंजन प्राप्त होने वाले सभी पाठ हैं। एक कंपाइलर द्वारा संसाधित सी # स्रोत फ़ाइल की तरह, एसक्यूएल स्रोत कोड को निम्न स्तर के डेटाबेस संचालन के अनुक्रम का उत्पादन करने के लिए किसी भी तरीके से संकलित किया जाना चाहिए- यह आउटपुट निष्पादन योजना के नाम पर चला जाता है। संकल्पनात्मक रूप से, निष्पादन योजना की पीढ़ी को प्रोग्राम को संकलित करने के डेटाबेस समकक्ष के रूप में देखा जा सकता है।

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

(झूठी) मिथक यह है कि एक डीबीएमएस केवल संग्रहित प्रक्रियाओं के लिए निष्पादन योजना का पुन: उपयोग करता है। जहां तक ​​SQL सर्वर और ओरेकल डीबीएमएस का संबंध है, निष्पादन योजनाओं का पुन: उपयोग करने का लाभ किसी भी SQL कथन पर लागू होता है। SQL सर्वर 2005 ऑनलाइन दस्तावेज़ से उद्धरण:

जब SQL सर्वर 2005 में कोई SQL कथन निष्पादित किया जाता है, तो रिलेशनल इंजन पहले प्रक्रिया कैश को देखता है ताकि यह सत्यापित किया जा सके कि एक ही SQL कथन के लिए मौजूदा निष्पादन योजना मौजूद है। एसक्यूएल सर्वर 2005 एसक्यूएल कथन को पुन: संकलित करने के ऊपरी हिस्से को सहेजने, किसी भी मौजूदा योजना का पुन: उपयोग करता है। यदि कोई मौजूदा निष्पादन योजना मौजूद नहीं है, तो SQL Server 2005 क्वेरी के लिए एक नई निष्पादन योजना उत्पन्न करता है।

सादे एसक्यूएल कोड से बेहतर प्रदर्शन करने वाले एसपी के आसपास बहस व्यर्थ है। निष्पादन के अनुसार, डेटाबेस को हिट करने वाला कोई भी SQL कोड उसी तरह से व्यवहार किया जाता है। प्रदर्शन संकलित एक बार बराबर है। अवधि।

+2

देखें आपने मेरा दिमाग मारा। इसे अपने दृष्टिकोण से फिर से अध्ययन करने की आवश्यकता है। एक अलग दृष्टिकोण के लिए धन्यवाद। –

+0

अच्छा प्रयास काउग ले –

+1

संग्रहित प्रक्रियाएं कुछ डीबी संचालन को तेज करने के लिए बहुत अच्छी हैं ... हालांकि, एक संग्रहित प्रक्रिया को 'क्रिएटिंग' करते समय, एसईटी नोएक्सईसी होने पर एसपी (एसक्यूएल स्टेटमेंट्स) को पूर्व-संकलित करने में मदद मिलेगी .. :) –

-2

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

+4

यह सिर्फ सादा है *** सच नहीं है *** - स्वीकृत उत्तर –

1

यह क्वेरी पर निर्भर करता है, सरल प्रश्नों के लिए यह एक प्रश्न के रूप में सबसे अच्छा लिखा और निष्पादित किया जाता है। हालांकि जब आपके पास डेटाबेस पक्ष पर अधिक प्रसंस्करण होता है (आप कर्सर में डेटा लेना चाहते हैं और इसे चालू करते हैं), संग्रहीत प्रक्रियाएं बेहतर होती हैं क्योंकि वे डेटाबेस सर्वर पर निष्पादित होती हैं और अनावश्यक ओवरहेड जैसे पार्सिंग और अतिरिक्त संचार से बचती हैं ।

+0

मतलब देखें कहने के लिए कि संग्रहीत प्रक्रिया सरल एकल क्वेरी के लिए अच्छा नहीं होगा ?? मुझे संग्रहित प्रक्रिया में लिखने के बिना एकल सरल क्वेरी लिखनी चाहिए ??? –

+0

कुछ डीबी ऑपरेशंस को तेज करने के लिए संग्रहीत प्रक्रियाएं बहुत अच्छी हैं –

+0

मेरा कहना है कि कुछ ऐसी स्थितियां हैं जिनमें एक संग्रहीत प्रक्रिया का उपयोग करने से स्थिर स्थिति बेहतर होती है। खासकर अगर यह एक साधारण सवाल है। चीयर्स! – wizgot

-2

संग्रहीत प्रक्रिया डेटाबेस में क्वेरी संग्रहीत की जाती है। वे precompiled हैं। जब आप संग्रहीत प्रक्रिया (SQL सर्वर) निष्पादित करने के लिए डेटाबेस का अनुरोध करते हैं, तो SQL सर्वर में संग्रहीत प्रक्रिया के लिए पहले से ही निष्पादन योजना है। जबकि सरल प्रश्नों को रन टाइम पर अपनी निष्पादन योजना बनाने की आवश्यकता होती है। आप अध्ययन करने के लिए और अधिक here

+0

यही कारण है कि संग्रहीत प्रक्रियाएं एड-हाक क्वेरीज़ से तेज हैं –

+0

@ मुहम्मद काशीफ धन्यवाद :) मैंने आपका लिंक पढ़ा और मेरा दिमाग स्पष्ट दिशा में प्राप्त कर लिया। –

+8

यह सिर्फ सादा *** सच नहीं है *** - स्वीकृत उत्तर –

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