2008-10-16 20 views
7
के लिए तेजी से संग्रहित प्रक्रियाओं कर रहे हैं

संभव डुप्लिकेट:
Are Stored Procedures more efficient, in general, than inline statements on modern RDBMS's?सरल प्रश्नों

मैं जैसे बुनियादी प्रश्नों, के लिए एक संग्रहीत प्रक्रिया को क्रियान्वित कर रहा हूँ, तो:

SELECT ColA, ColB FROM MyTable WHERE ID = 123; 
SELECT * FROM MyTable,OtherTable WHERE MyTable.ID = OtherTable.ID ORDER BY CreatedAt desc 

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

जब आप संग्रहित प्रक्रिया बनाते हैं और चलाते हैं तो किस तरह के अनुकूलन, यदि कोई हो, तो होता है? क्या आप मुझे समझने में मदद करने के लिए किसी भी संसाधन की सिफारिश कर सकते हैं कि मुझे कब और क्यों उपयोग करना चाहिए?

यदि यह कोई अंतर बनाता है, तो मेरा डेटाबेस एक एमएस एसक्यूएल 2005 डीबी है। संग्रहित प्रक्रियाओं का उपयोग कर के लिए

उत्तर

12

कारण:

  • नेटवर्क यातायात कम - संपूर्ण नेटवर्क में SQL विवरण भेजना है। Sprocs के साथ, आप बैच में एसक्यूएल निष्पादित कर सकते हैं, जो भी अधिक कुशल है।
  • कैशिंग क्वेरी प्लान - पहली बार स्पोक निष्पादित किया गया है, SQL सर्वर एक निष्पादन योजना बनाता है, जिसे पुन: उपयोग के लिए कैश किया जाता है। यह अक्सर छोटे प्रश्नों के लिए अक्सर प्रदर्शन करने वाला होता है।
  • आउटपुट पैरामीटर का उपयोग करने की क्षमता - यदि आप इनलाइन एसक्यूएल भेजते हैं जो एक पंक्ति देता है, तो आप केवल एक रिकॉर्डसेट प्राप्त कर सकते हैं। स्पॉक्स के साथ आप उन्हें आउटपुट पैरामीटर के रूप में वापस ले सकते हैं, जो काफी तेज़ है।
  • अनुमतियां - जब आप इनलाइन एसक्यूएल भेजने के लिए, आप उपयोगकर्ता है, जो केवल देने की अनुमति की तुलना में अधिक पहुंच प्रदान करना है एक sproc तर्क के
  • पृथक्करण पर अमल करने के लिए तालिका (ओं) पर अनुमति प्रदान करने के लिए है - SQL-जनरेटिंग कोड को हटाएं और इसे डेटाबेस में विभाजित करें।
  • के बिना संपादित करने की क्षमता - यह विवादास्पद हो सकता है। आप एप्लिकेशन को पुन: संकलित किए बिना एसक्यूएल में एसक्यूएल को संपादित कर सकते हैं।
  • खोजें कि एक टेबल का उपयोग किया जाता है - स्पॉक्स के साथ, यदि आप किसी विशेष तालिका का संदर्भ देने वाले सभी SQL कथन ढूंढना चाहते हैं, तो आप स्पोक कोड निर्यात कर सकते हैं और इसे खोज सकते हैं। कोड में खोजने की कोशिश करने से यह बहुत आसान है।
  • अनुकूलन - एसक्यूएल को अनुकूलित करने के लिए डीबीए के लिए आसान है और स्पॉक्स का उपयोग होने पर डेटाबेस को ट्यून करना आसान है। लापता इंडेक्स और ऐसे ढूंढना आसान है।
  • एसक्यूएल इंजेक्शन हमले - सही ढंग से लिखित इनलाइन एसक्यूएल हमलों के खिलाफ बचाव कर सकते हैं, लेकिन इस सुरक्षा के लिए स्पॉक्स बेहतर हैं।
+0

उत्कृष्ट अंक। मैं विशेष रूप से चाहता हूं कि अधिक प्रोग्रामर यह महसूस करेंगे कि उनके डेटाबेस डेटाबेस को धोखाधड़ी के लिए कितना हानिकारक है यदि वे टेबल स्तर पर अनुमतियां सेट करते हैं। – HLGEM

+1

डरावना, हुह?अगर मैं इसे सही ढंग से समझ रहा हूं, संग्रहित प्रक्रियाओं के बजाय जेनरेट किए गए एसक्यूएल का उपयोग करके कई लिंक ऑपरेशंस केवल प्रत्यक्ष तालिका पहुंच के अभ्यास को बढ़ा रहे हैं। अपना संदेश बाहर रखें! – DOK

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