একটি যোগদানের প্রিকিটেট ফোর্সে নেস্টেড লুপগুলিতে কোনও ভেরিয়েবলের উল্লেখ করা কেন?


16

আমি সম্প্রতি এই সমস্যাটি জুড়ে এসেছি এবং অনলাইনে এটির কোনও আলোচনা পাইনি।

কোয়েরি নীচে

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; 

এখানে চিত্র বর্ণনা লিখুন

এই আচরণের কারণ কী? আর আমি যেটা পেয়েছি তার থেকে ভাল আর কি কাজ করা যায়? (এটি সম্ভবত অতিরিক্ত সম্পাদন পরিকল্পনা শাখার প্রয়োজন হয় না)

উত্তর:


13

আমি আপনার কোয়েরিটি একটি এসকিউএল 2012 উদাহরণে চেষ্টা করেছি এবং 411 পতাকাটি চিহ্নিত করে সমস্যাটি ঠিক করা হয়েছে বলে মনে হচ্ছে। এটি সক্ষম করার সাথে সাথে আমি 0.24 এর মোট ব্যয় এবং একটি অতিরিক্ত শাখার কোনওটিতেই একত্রীভূত হয়েছি।

এই ইস্যুটির জন্য নির্দিষ্ট কেবি নিবন্ধটি হল পারফরম্যান্স সমস্যাগুলি যখন তখন আপনার কোয়েরিতে জয়েন্ট প্রিকেটটিতে এসকিউএল সার্ভার ২০০৫ বা এসকিউএল সার্ভার ২০০৮ এ বাহ্যিক রেফারেন্স কলাম থাকে occur

এখানে চিত্র বর্ণনা লিখুন

আরও যোগ্যতা অর্জনের জন্য, টিএফ 4199 সমস্ত অপ্টিমাইজার ফিক্স সক্ষম করে। আরও তথ্যের জন্য এই লিঙ্কটি দেখুন । একবারে সমস্ত কিছু সক্ষম করার সাথে অদ্ভুত পার্শ্ব-প্রতিক্রিয়া থাকতে পারে, সুতরাং আপনি যদি একটি নির্দিষ্ট ফিক্স পেতে পারেন তবে এটির নিজেরাই ফিক্স সক্ষম করা আরও ভাল।

আপনি ব্যবহার করে প্রতি কোয়েরির ভিত্তিতে ট্রেস পতাকা সক্ষম করতে পারেন OPTION (QUERYTRACEON 4199);


0

পুরানো প্রশ্ন, তবে উত্তরটি অত্যন্ত নির্ভুল ছিল না, ভেবেছিলাম যে আমি খুঁজে পেয়েছি সেগুলি পোস্ট করব। কেন ক্যোয়ারী অপ্টিমাইজারের দিকে ঝাঁকুনি রয়েছে তা নিশ্চিত নন HASHতবে আমি মনে করি এটি পছন্দ করে না MERGEকারণ এটির সাজানো ইনপুট নেই। 2012/14 এ,

DECLARE @S VARCHAR(1) = '';

    WITH T
        AS (SELECT TOP (2147483647)
                name + @S AS name2,
                *
            FROM   master..spt_values
            ORDER BY name + @S)
    SELECT *
    FROM   T T1
           INNER JOIN T T2
             ON T1.name2 = T2.name2;

নিম্নলিখিত পরিকল্পনা উত্পাদন করে:

এখানে চিত্র বর্ণনা লিখুন

অত্যাচার TOPএবং ORDER BYকোটে মধ্যে অপটিমাইজার সম্পাদন করতে ডেটা সেটটি সম্পর্কে যথেষ্ট জ্ঞান দিতে বলে মনে হয় MERGE JOIN

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.