আমি সম্প্রতি এই সমস্যাটি জুড়ে এসেছি এবং অনলাইনে এটির কোনও আলোচনা পাইনি।
কোয়েরি নীচে
DECLARE @S VARCHAR(1) = '';
WITH T
AS (SELECT name + @S AS name2,
*
FROM master..spt_values)
SELECT *
FROM T T1
INNER JOIN T T2
ON T1.name2 = T2.name2;
সর্বদা নেস্টেড লুপস প্ল্যান পায়
ইঙ্গিতগুলি INNER HASH JOIN
বা INNER MERGE JOIN
ইঙ্গিত সহ জোর করার চেষ্টা করা নিম্নলিখিত ত্রুটিটি উত্পন্ন করে।
এই কোয়েরিতে সংজ্ঞায়িত ইঙ্গিতগুলির কারণে ক্যোয়ারী প্রসেসর কোনও ক্যোয়ারী প্ল্যান তৈরি করতে পারেনি। কোনও ইঙ্গিত নির্দিষ্ট না করে এবং SET FORCEPLAN ব্যবহার না করে কোয়েরিটি পুনরায় জমা দিন।
আমি একটি পরিশ্রম পেয়েছি যা হ্যাশ বা মার্জকে ব্যবহারের অনুমতি দেয় না - একটি সামগ্রীতে ভেরিয়েবল মোড়ানো wra উত্পন্ন প্ল্যানটি উল্লেখযোগ্যভাবে কম আটকানো (19.2025 বনাম 0.261987)
DECLARE @S2 VARCHAR(1) = '';
WITH T
AS (SELECT name + (SELECT MAX(@S2)) AS name2,
*
FROM spt_values)
SELECT *
FROM T T1
INNER JOIN T T2
ON T1.name2 = T2.name2;
এই আচরণের কারণ কী? আর আমি যেটা পেয়েছি তার থেকে ভাল আর কি কাজ করা যায়? (এটি সম্ভবত অতিরিক্ত সম্পাদন পরিকল্পনা শাখার প্রয়োজন হয় না)