DISTINCT
নীচের উদাহরণে যোগ করা কি ক্যোরিয় চলমান সময়ে কোনও প্রভাব ফেলবে?
এটি কখনও কখনও ইঙ্গিত হিসাবে ব্যবহার করা কি বুদ্ধিমান?
SELECT *
FROM A
WHERE A.SomeColumn IN (SELECT DISTINCT B.SomeColumn FROM B)
DISTINCT
নীচের উদাহরণে যোগ করা কি ক্যোরিয় চলমান সময়ে কোনও প্রভাব ফেলবে?
এটি কখনও কখনও ইঙ্গিত হিসাবে ব্যবহার করা কি বুদ্ধিমান?
SELECT *
FROM A
WHERE A.SomeColumn IN (SELECT DISTINCT B.SomeColumn FROM B)
উত্তর:
এই জাতীয় জিনিস সম্পর্কে ভাবছেন যখন আপনি আপনার প্রশ্নের জন্য কার্যকরকরণ পরিকল্পনা তুলনা করা উচিত।
আপনার সন্ধানের জন্য কার্যনির্বাহী পরিকল্পনার আকৃতি অবশ্যই আপনার টেবিলগুলিতে কতগুলি সারি রয়েছে এবং কোন সূচকগুলি সংজ্ঞায়িত করা হয়েছে তার উপর নির্ভর করে অবশ্যই পৃথক হবে।
একটি দৃশ্যে যা দেখায় যে পারফরম্যান্সে কোনও পার্থক্য নেই 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
*******************