मेरी समझ यह है कि जब चयन कथन में NOLOCK का उपयोग किया जाता है, तो यह असामान्य/गंदी पंक्तियों को भी पढ़ सकता है। लेकिन मैं टेबल पर NOLOCK संकेत का लाभ उठाना चाहता था ताकि मेरी SELECT क्वेरी तेजी से चले।

अब, टेबल पर NOLOCK करता है लेकिन "सेट ट्रांज़ेक्शन आइसोलेशन लेवल रीड कमिटेड" के साथ मुझे केवल प्रतिबद्ध पंक्तियों (SET के कारण) के साथ NOLOCK लाभ और तेज़ SELECT क्वेरी (NOLOCK की वजह से) देता है?

12
Dave 4 अक्टूबर 2010, 20:14

1 उत्तर

सबसे बढ़िया उत्तर

हाँ एक टेबल संकेत अलगाव स्तर सेटिंग को ओवरराइड करता है, इसलिए आप अभी भी गंदे पढ़ेंगे

परीक्षण करने में आसान

पहले इसे चलाएं

create table bla(id int)
insert bla values(1)



begin tran
select * from bla with (updlock, holdlock)

सुनिश्चित करें कि ट्रॅन कमिट न करें !! एक और विंडो खोलें और इसे चलाएं

SET TRANSACTION ISOLATION LEVEL READ COMMITTED

select * from bla -- with (nolock)

आपको कुछ भी वापस नहीं मिलता है।

एक और विंडो खोलें और इसे अभी चलाएं

SET TRANSACTION ISOLATION LEVEL READ COMMITTED

select * from bla with (nolock)

जैसा कि आप देख सकते हैं कि आपको पंक्ति वापस मिल जाएगी

BTW, READ COMMITTED डिफ़ॉल्ट अलगाव स्तर है, इसे सेट करने की कोई आवश्यकता नहीं है

स्नैपशॉट अलगाव पर एक नज़र डालें, जो आपको गंदा डेटा वापस देता है लेकिन फिर भी लॉक नहीं होगा

19
SQLMenace 4 अक्टूबर 2010, 20:22