এই সংযুক্ত আইটেমের উদাহরণ কোড
একটি বাগ প্রদর্শন করে যেখানে
SELECT COUNT(*)
FROM dbo.my_splitter_1('2') L1
INNER JOIN dbo.my_splitter_1('') L2
ON L1.csv_item = L2.csv_item
সঠিক ফলাফল প্রদান করে। তবে নিম্নলিখিতগুলি ভুল ফলাফল (নতুন কার্ডিনালিটি অনুমান ব্যবহার করে 2014 এ) প্রদান করে
SELECT
(SELECT COUNT(*)
FROM dbo.my_splitter_1('2') L1
INNER JOIN dbo.my_splitter_1('') L2
ON L1.csv_item = L2.csv_item)
যেহেতু এটি ভুলভাবে L2 এর জন্য ফলাফলগুলি একটি সাধারণ সাব এক্সপ্রেশন স্পুলের মধ্যে লোড করে তারপরে এল 1 ফলাফলের ফলাফলটি পুনরায় প্রদর্শন করে।
আমি জানতে আগ্রহী ছিলাম কেন দুটি প্রশ্নের মধ্যে আচরণের মধ্যে পার্থক্য রয়েছে। ট্রেস পতাকা 8675 দেখায় যে কাজ করে search(0) - transaction processing
সে প্রবেশ করে এবং ব্যর্থ হয় এমন একটি প্রবেশ করে search(1) - quick plan
।
সুতরাং আমি ধরে নিই যে অতিরিক্ত পরিবর্তনের নিয়মের প্রাপ্যতা আচরণের পার্থক্যের পিছনে রয়েছে (বিল্ডজিবি অ্যাপ্লি বা জেনজিবি অ্যাপ্লায়সিম্পল অক্ষম করে যেমন উদাহরণস্বরূপ এটি ঠিক করা হয়েছে)।
তবে কেন এই একই ধরণের প্রশ্নের দুটি পরিকল্পনা বিভিন্ন অপ্টিমাইজেশন পর্যায়ের মুখোমুখি হয়? আমি যা পড়েছি তার থেকে search (0)
কমপক্ষে তিনটি টেবিল প্রয়োজন এবং সেই শর্তটি অবশ্যই প্রথম উদাহরণে মেটেনি।