2011-06-14 2 views
7

तैयार कथन के बजाय कथन का उपयोग कब करें। मुझे लगता है कि कोई पैरामीटर वाले प्रश्नों में कथन का उपयोग किया जाता है लेकिन क्यों तैयार कथन का उपयोग नहीं करते? कोई पैराम के साथ पूछताछ के लिए कौन सा तेज़ है।तैयार वक्तव्य पर वक्तव्य का उपयोग कब करें?

+4

वहाँ शायद ही कभी, सामान्य बयानों का उपयोग करने के शायद DDL विवरण और अन्य परम-कम बयानों के अलावा एक कारण है। –

+1

संभावित डुप्लिकेट [स्टेटमेंट और प्रीपेडस्टेटमेंट के बीच अंतर] (http://stackoverflow.com/questions/3271249/difference-between-statement-and-preparedstatement) – BalusC

उत्तर

9

मुझे लगता है कि कोई पैरामीटर वाले प्रश्नों में कथन का उपयोग नहीं किया जाता है लेकिन तैयार कथन का उपयोग क्यों नहीं किया जाता है?

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

कौन सा कोई पैरामीटर वाला प्रश्नों के लिए तेजी से होता है।

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

+0

FYI, * एक सामान्य क्वेरी के काम का * अधिकांश * बयान का विश्लेषण, डेटा पुनर्प्राप्ति नहीं। यदि आप एक ही कथन का कई बार उपयोग करते हैं तो तैयार किए गए स्तर बहुत तेज़ होते हैं। – Bohemian

+0

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

4
आपका आवश्यकता के आधार पर है कि

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

इसके अलावा एसक्यूएल इंजेक्शन PreparedStatement का उपयोग कर बचा जा सकता है।

लेकिन अगर आप यह सुनिश्चित करें कि आप SQL क्वेरी केवल एक बार चलाते हैं, कभी कभी वक्तव्य सबसे अच्छा उम्मीदवार के बाद से जब आप PreparedStatement वस्तु कभी कभी बनाने यह अतिरिक्त डाटाबेस कॉल करने, चालक precompilation का समर्थन करता है, तो हो जाएगा, विधि Connection.prepareStatement(java.lang.String) बयान भेज देंगे precompilation के लिए डेटाबेस के लिए।

लेख के नीचे पढ़ने के लिए "वक्तव्य PreparedStatement बनाम" समझने के लिए