sql - এসকিউএল সার্ভার NOLOCK এবং যোগদান




sql-server (2)

পটভূমি: আমার কাছে একটি কর্মক্ষম-সমালোচনামূলক প্রশ্ন রয়েছে যা আমি চালাতে চাই এবং আমি নোংরা পঠন সম্পর্কে উদ্বিগ্ন নই।

আমার প্রশ্ন হল; আমি যোগদান করছি, আমি কি সেইসাথে NOLOCK ইঙ্গিত নির্দিষ্ট করতে হবে?

এই ক্ষেত্রে; হল:

SELECT * FROM table1 a WITH (NOLOCK)
INNER JOIN table2 b WITH (NOLOCK) ON a.ID = b.ID

সমতুল্য:

SELECT * FROM table1 a WITH (NOLOCK)
INNER JOIN table2 b ON a.ID = b.ID

নাকি যোগদানের টেবিলে তালাবদ্ধ না হওয়া নিশ্চিত করতে যোগদান করার জন্য আমাকে (NOLOCK) ইঙ্গিতটি নির্দিষ্ট করতে হবে?


আমরাও। আপনি READ UNCOMMITTED বিচ্ছিন্নতা স্তর সেট করুন যা পৃথক লক ইঙ্গিত দেওয়ার চেয়ে সবসময় ভাল। অথবা, এখনও ভাল, যদি আপনি consistency মতো বিশদ সম্পর্কে যত্নশীল হন তবে স্ন্যাপশট বিচ্ছিন্নতা ব্যবহার করুন।


আমি কেবলমাত্র আপনার আসল প্রশ্নটি READ UNCOMMITTED

হ্যাঁ, আপনি যোগদান প্রতিটি টেবিল উপর WITH(NOLOCK) প্রয়োজন। না, আপনার প্রশ্ন একই নয়।

এই ব্যায়াম চেষ্টা করুন। একটি লেনদেন শুরু করুন এবং টেবিল 1 এবং টেবিল 2 এ একটি সারি সন্নিবেশ করান। চুক্তি বা এখনো লেনদেন রোলব্যাক করবেন না। এই মুহুর্তে আপনার প্রথম প্রশ্নটি সফলভাবে ফিরে আসবে এবং অসমাপ্ত সারিগুলি অন্তর্ভুক্ত করবে; আপনার দ্বিতীয় প্রশ্নটি প্রত্যাবর্তন করবে না কারণ table2 এর WITH(NOLOCK) ইঙ্গিত নেই।






nolock