সাবকোয়ারিগুলিতে একটি ইঙ্গিত হিসাবে DISTINCT ব্যবহার করা কি কার্যকর?


18

DISTINCTনীচের উদাহরণে যোগ করা কি ক্যোরিয় চলমান সময়ে কোনও প্রভাব ফেলবে?
এটি কখনও কখনও ইঙ্গিত হিসাবে ব্যবহার করা কি বুদ্ধিমান?

SELECT *
FROM   A
WHERE  A.SomeColumn IN (SELECT DISTINCT B.SomeColumn FROM B) 

উত্তর:


25

এই জাতীয় জিনিস সম্পর্কে ভাবছেন যখন আপনি আপনার প্রশ্নের জন্য কার্যকরকরণ পরিকল্পনা তুলনা করা উচিত।

আপনার সন্ধানের জন্য কার্যনির্বাহী পরিকল্পনার আকৃতি অবশ্যই আপনার টেবিলগুলিতে কতগুলি সারি রয়েছে এবং কোন সূচকগুলি সংজ্ঞায়িত করা হয়েছে তার উপর নির্ভর করে অবশ্যই পৃথক হবে।
একটি দৃশ্যে যা দেখায় যে পারফরম্যান্সে কোনও পার্থক্য নেই when যখন সেখানে তুলনামূলকভাবে আরও বেশি সারি Aথাকে B। অপ্টিমাইজারটি তখন Bনেস্টেড লুপের সাথে ড্রাইভিং টেবিল হিসাবে বেছে নেবে বিপরীতে A। একটি সঠিক ফলাফল ফিরে Bপেতে এটি থেকে আলাদা স্বতন্ত্র সারিগুলি পেতে উভয় প্রশ্নের টেবিলে স্ট্রিম সমষ্টি ব্যবহার করতে হবে B। সুতরাং এক্ষেত্রে স্বতন্ত্র কীওয়ার্ডটির কার্য সম্পাদনের কোনও প্রভাব নেই।

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

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

অন্য দুটি সুস্পষ্ট মামলার পরীক্ষা করার জন্য কার্যকরকরণ পরিকল্পনা, A এর চেয়ে B এর বেশি সারি এবং সারণীতে সমান সংখ্যক সারি, প্রশ্নের জন্য সঠিক একই কার্যকরকরণ পরিকল্পনাটিও দেখায়।

হালনাগাদ

ক্যোয়ারী অপ্টিমাইজেশন হওয়ার আগে ক্যোয়ারী সরলকরণের পর্যায়ে চলে যায়। ট্রেস পতাকা 8606 ব্যবহার করে যৌক্তিক গাছটি দেখতে দেখতে আপনি দেখতে পারেন।

প্রশ্নের জন্য ইনপুট ট্রিটি স্পষ্টভাবে আলাদা তবে সরলীকরণের পরে সেগুলি একই।

তথ্যসূত্র: আরও অনিরোধকৃত কোয়েরি অপটিমাইজার ট্রেস পতাকা এবং ক্যোয়ারী অপ্টিমাইজার ডিপ ডাইভ - পার্ট 2

স্বতন্ত্র ব্যবহারের জন্য প্রশ্নের জন্য ইনপুট ট্রি এবং সরলীকৃত গাছ:

*** Input Tree: ***
        LogOp_Project QCOL: [xx].[dbo].[A].SomeColumn
            LogOp_Select
                LogOp_Get TBL: A A TableID=213679909 TableReferenceID=0 IsRow: COL: IsBaseRow1002 
                ScaOp_SomeComp 2
                    ScaOp_Identifier QCOL: [xx].[dbo].[A].SomeColumn
                    LogOp_GbAgg OUT(QCOL: [xx].[dbo].[B].SomeColumn,) BY(QCOL: [xx].[dbo].[B].SomeColumn,)
                        LogOp_Project
                            LogOp_Project
                                LogOp_Get TBL: B B TableID=229679966 TableReferenceID=0 IsRow: COL: IsBaseRow1006 
                                AncOp_PrjList 
                            AncOp_PrjList 
                        AncOp_PrjList 
            AncOp_PrjList 
*******************
*** Simplified Tree: ***
        LogOp_LeftSemiJoin
            LogOp_Get TBL: A A TableID=213679909 TableReferenceID=0 IsRow: COL: IsBaseRow1002 
            LogOp_Get TBL: B B TableID=229679966 TableReferenceID=0 IsRow: COL: IsBaseRow1006 
            ScaOp_Comp x_cmpEq
                ScaOp_Identifier QCOL: [xx].[dbo].[A].SomeColumn
                ScaOp_Identifier QCOL: [xx].[dbo].[B].SomeColumn
*******************

পৃথক ব্যবহার না করে ক্যোয়ারির জন্য ইনপুট ট্রি এবং সরলীকৃত গাছ :

*** Input Tree: ***
        LogOp_Project QCOL: [xx].[dbo].[A].SomeColumn
            LogOp_Select
                LogOp_Get TBL: A A TableID=213679909 TableReferenceID=0 IsRow: COL: IsBaseRow1002 
                ScaOp_SomeComp 2
                    ScaOp_Identifier QCOL: [xx].[dbo].[A].SomeColumn
                    LogOp_Project
                        LogOp_Get TBL: B B TableID=229679966 TableReferenceID=0 IsRow: COL: IsBaseRow1006 
                        AncOp_PrjList 
            AncOp_PrjList 
*******************
*** Simplified Tree: ***
        LogOp_LeftSemiJoin
            LogOp_Get TBL: A A TableID=213679909 TableReferenceID=0 IsRow: COL: IsBaseRow1002 
            LogOp_Get TBL: B B TableID=229679966 TableReferenceID=0 IsRow: COL: IsBaseRow1006 
            ScaOp_Comp x_cmpEq
                ScaOp_Identifier QCOL: [xx].[dbo].[A].SomeColumn
                ScaOp_Identifier QCOL: [xx].[dbo].[B].SomeColumn
*******************
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.