কয়েক ডজন সারি সহ আমার একটি টেবিল রয়েছে। সরলীকৃত সেটআপ অনুসরণ করা হচ্ছে
CREATE TABLE #data ([Id] int, [Status] int);
INSERT INTO #data
VALUES (100, 1), (101, 2), (102, 3), (103, 2);
এবং আমার কাছে একটি কোয়েরি রয়েছে যা এই টেবিলের সাথে সারণীর মান নির্মিত সারিগুলির (ভেরিয়েবল এবং ধ্রুবকগুলির তৈরি) একটি সেট এর সাথে সংযুক্ত করে
DECLARE @id1 int = 101, @id2 int = 105;
SELECT
COALESCE(p.[Code], 'X') AS [Code],
COALESCE(d.[Status], 0) AS [Status]
FROM (VALUES
(@id1, 'A'),
(@id2, 'B')
) p([Id], [Code])
FULL JOIN #data d ON d.[Id] = p.[Id];
ক্যোয়ারী এক্সিকিউশন প্ল্যানটি দেখিয়ে দিচ্ছে যে অপ্টিমাইজারের সিদ্ধান্ত FULL LOOP JOIN
কৌশল ব্যবহার করা , যা উপযুক্ত বলে মনে হয়, উভয় ইনপুটে খুব কম সারি রয়েছে। একটি জিনিস আমি লক্ষ্য করেছি (এবং একমত হতে পারি না), যদিও, টিভিসি সারিগুলি ছোট করা হচ্ছে (লাল বাক্সে কার্যকরকরণ পরিকল্পনার ক্ষেত্রটি দেখুন)।
অপ্টিমাইজার কেন এখানে স্পুলের পরিচয় দেয়, এটি করার কারণ কী? স্পুলের বাইরে জটিল কিছু নেই। দেখে মনে হচ্ছে এটি প্রয়োজনীয় নয়। এই ক্ষেত্রে এটি থেকে কীভাবে মুক্তি পাবেন, সম্ভাব্য উপায়গুলি কী কী?
উপরোক্ত পরিকল্পনাটি প্রাপ্ত হয়েছিল
মাইক্রোসফ্ট এসকিউএল সার্ভার 2014 (এসপি 2-সিইউ 11) (KB4077063) - 12.0.5579.0 (এক্স 64)