जवाबों:
वे एक जैसी ही चीज हैं। यदि आप set transaction isolation levelकथन का उपयोग करते हैं , तो यह कनेक्शन के सभी तालिकाओं पर लागू होगा, इसलिए यदि आप केवल nolockएक या दो तालिकाओं का उपयोग करना चाहते हैं ; अन्यथा दूसरे का उपयोग करें।
दोनों आपको गंदे रीड्स देंगे। यदि आप इसके साथ ठीक हैं, तो उनका उपयोग करें। यदि आपके पास गंदे रीड नहीं हो सकते हैं, तो इसके बजाय विचार करें snapshotया serializableसंकेत दें।
के साथ (NOLOCK) एक टेबल स्तर पर एक संकेत है। कनेक्शन को प्रभावित करने के साथ READ_UNCOMMITTED में लेनदेन अलगाव स्तर सेट करना। अंतर स्कोप के संदर्भ में है। यहां SQL सर्वर प्रलेखन में READUNCOMMITTED और NOLOCK देखें:
http://technet.microsoft.com/en-us/library/ms187373.aspx
परिवहन अलगाव स्तर के लिए: http://technet.microsoft.com/en-us/library/ms173763.aspx
दिशा-निर्देशों के रूप में ... StackOverflow और इलेक्ट्रिक इंटरवेब से एक यादृच्छिक खोज ...
मेरे ज्ञान में एकमात्र अंतर प्रभावों का दायरा है जैसा कि स्ट्रॉमी ने कहा था। NOLOCK ने एक मेज पर इशारा किया और सत्र के दौरान पढ़े।
समस्याओं के रूप में हो सकता है, यह सब स्थिरता के बारे में है। यदि आप परवाह करते हैं तो इस बात से अवगत रहें कि आपको वह गंदे पाठ कहा जा सकता है जो गलत जानकारी पर हेरफेर किए जा रहे अन्य डेटा को प्रभावित कर सकते हैं।
मुझे व्यक्तिगत रूप से नहीं लगता कि मैंने इसमें से कोई समस्या देखी है, लेकिन यह अधिक हो सकता है कि मैं नोलॉक का उपयोग कैसे करूं। आपको यह पता होना चाहिए कि ऐसे परिदृश्य हैं जहां इसका उपयोग करना ठीक होगा। परिदृश्य जहां आप ज्यादातर एक तालिका में नए डेटा जोड़ रहे हैं, लेकिन एक और प्रक्रिया है जो डेटा परिदृश्य की जांच करने के लिए पीछे आती है। यह संभवत: ठीक होगा क्योंकि प्रमुख प्रवाह में रीड के दौरान पीछे जाने और पंक्तियों को अपडेट करना शामिल नहीं है।
इसके अलावा, मेरा मानना है कि इन दिनों आपको मल्टी-वर्जन कॉन्सिलर कंट्रोल में देखना चाहिए। मेरा मानना है कि उन्होंने इसे 2005 में जोड़ा था और यह पाठकों को पाठकों को ब्लॉक करने के लिए डेटाबेस का एक स्नैपशॉट उपयोग करने से रोकने में मदद करता है। मैं एक लिंक शामिल करूंगा और आगे के शोध को पाठक तक छोड़ूंगा:
जैसा कि आपको प्रत्येक तालिका के लिए (NOLOCK) के साथ उपयोग करना होगा, इसे हर FROM या JOIN क्लॉज में लिखना कष्टप्रद हो सकता है। हालाँकि इसका एक कारण है कि इसे "गंदा" कहा जाता है। इसलिए आपको वास्तव में पता होना चाहिए कि आप कब एक करते हैं, और इसे सत्र के दायरे के लिए डिफ़ॉल्ट रूप में सेट नहीं करना चाहिए। क्यों?
एक (NOLOCK) के साथ भूल जाने से आपके कार्यक्रम को बहुत नाटकीय तरीके से प्रभावित नहीं किया जा सकता है, हालांकि एक गंदा पाठ करना जहां आप नहीं चाहते हैं कि कुछ परिस्थितियों में अंतर बना सकते हैं।
इसलिए (NOLOCK) के साथ उपयोग करें यदि चयनित डेटा को गलत होने की अनुमति है, क्योंकि इसे बाद में वापस लाया जा सकता है। यह ज्यादातर तब उपयोग किया जाता है जब आप प्रदर्शन को बढ़ाना चाहते हैं, और आपके आवेदन के संदर्भ में आवश्यकताओं को यह जोखिम लेने की अनुमति देता है कि असंगत डेटा प्रदर्शित किया जा रहा है। हालाँकि, आपको या किसी प्रभारी को बिना (NOLOCK) के उपयोग के निर्णय के पेशेवरों और विपक्षों को तौलना होगा।
REPEATABLE READइसके बजाय पर विचार करेंSERIALIZABLE।SERIALIZABLEवास्तव में प्रतिबंधात्मक है और इसे लगभग कभी भी उपयोग नहीं किया जाना चाहिए (उदाहरण के लिए कुछ महत्वपूर्ण वित्तीय अनुप्रयोगों को छोड़कर)।