এক্সিকিউশন প্ল্যানের বুনিয়াদি - হ্যাশ ম্যাচের বিভ্রান্তি


39

আমি মৃত্যুদন্ড কার্যকর করার পরিকল্পনাগুলি শিখতে শুরু করি এবং হ্যাশ ম্যাচটি ঠিক কীভাবে কাজ করে এবং কেন এটি একটি সরল যোগদানের জন্য ব্যবহৃত হবে তা নিয়ে বিভ্রান্ত হয়ে পড়েছি:

select Posts.Title, Users.DisplayName
From Posts JOIN Users on
Posts.OwnerUserId = Users.Id
OPTION (MAXDOP 1)

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

আমি এটি বুঝতে পারছি শীর্ষ সূচির স্ক্যানের ফলাফলগুলি হ্যাশ সক্ষম হয়ে যায় এবং নীচের সূচকের ক্লাস্টারযুক্ত স্ক্যানের প্রতিটি সারি সন্ধান করা হয়। আমি বুঝতে পারি কীভাবে হ্যাশ টেবিলগুলি কমপক্ষে কিছুটা ডিগ্রি নিয়ে কাজ করে তবে আমি এই বিষয়ে উদাহরণস্বরূপ কোন মানগুলি হ্যাশ করবে তা সম্পর্কে আমি বিভ্রান্ত।

আমার কাছে কী বোঝা যাবে যে তাদের মধ্যে সাধারণ ক্ষেত্র, আইডি হ্যাশ করা হয় - তবে যদি এটি হয় তবে কেন একটি সংখ্যা হ্যাশ করবে?

উত্তর:


29

এসকিউএলরকস্টারের উত্তর উদ্ধৃতি হিসাবে

বড়, অচলিত ইনপুটগুলির জন্য সেরা।

এখন,

  • ব্যবহারকারীদের থেকে .ডিসপ্লে নেম সূচক স্ক্যান (অনুমানবিহীন) অনুমান করা হয়েছে যে আপনি ব্যবহারকারীরা পেয়ে যাবেন I
  • আপনি OwnerUserId = অরসোর্টড এর জন্যও স্ক্যান করছেন

এটি 2 আনর্ডারড ইনপুট।

আমি শিরোনাম সহ OwnerUserId এর পোস্ট টেবিলটিতে একটি সূচক বিবেচনা করব। এটি JOIN + এ ইনপুটটির একদিকে কিছু ক্রম যুক্ত করবে এটি কভারিং সূচক হবে

CREATE INDEX IX_OwnerUserId ON Posts (OwnerUserId) INCLUDE (Title)

এরপরে আপনি দেখতে পাবেন যে ব্যবহারকারীদের is ডিসপ্লে নাম সূচকটি ব্যবহার করা হবে না এবং এটি পরিবর্তে পিকে স্ক্যান করবে।


1
আহ ঠিক আছে আমি এখন দেখছি, আমি ব্যবহারকারীদের কথা ভাবছিলাম is ডিসপ্লে নামটি পিকে দ্বারা অর্ডার করা হয়েছে যা ঠিক এটি নয়। এখন হ্যাশ ব্যবহার আমার কাছে আরও অনেক কিছু বোঝায়। ধন্যবাদ!
কাইল ব্র্যান্ড 18

1
আপনি OPTION (FAST n)ইঙ্গিতটিও দেখতে পেলেন, যেখানে এন হ'ল সারিগুলির প্রত্যাশা আপনি মনে করেন। এটি কী করবে তা হ'ল এন কম থাকলে হ্যাশ যোগ দেওয়ার পরিবর্তে নেস্টেড লুপগুলির প্রতি অনুকূলকরণ ias কারণ হ্যাশ যোগ দেয় বড় যোগদানের জন্য দ্রুত কিন্তু উচ্চ স্টার্টআপ ব্যয়। নেস্টেড লুপগুলি প্রতি সারিতে ব্যয়বহুল, তবে খুব সস্তায় শুরু করা যেতে পারে। সুতরাং এটি আপনার আসল ডেটা এবং অ্যাক্সেস প্যাটার্নের উপর ভিত্তি করে সূক্ষ্ম সুরকরণের বিষয়।
গাইউস

1
@ গাইউস: ব্যক্তিগতভাবে আমি ইঙ্গিতের চেয়ে সূচকগুলি চাইতাম। কোনও ইঙ্গিতটি ক্যোরির জন্য যুক্ত করা হয় কেবল যখন আপনি যুক্ত করেন। আকা ইঙ্গিত সময়ের সাথে সাথে দায় হয়ে যায়। সূচকগুলি অনেক বেশি সময় ধরে কার্যকর হতে থাকে।
জিবিএন

1
এটি কোনও একটি বা প্রস্তাব নয় :-)
গাইউস

14

Http://sqlinthewild.co.za/index.php/2007/12/30/execution-plan-operation-joins/ থেকে

"হ্যাশ জোড় একটি অতি ব্যয়বহুল যোগদানের ক্রিয়াকলাপ, কারণ এতে যোগদানের জন্য হ্যাশ টেবিল তৈরি করা দরকার That যোগদানের

হ্যাশ জোড় প্রথমে একটি ইনপুট পড়ে এবং জোড় কলামটি হ্যাশ করে এবং ফলস্বরূপ হ্যাশ এবং কলামের মানগুলিকে স্মৃতিতে নির্মিত একটি হ্যাশ টেবিলের মধ্যে রাখে। তারপরে এটি দ্বিতীয় ইনপুটটির সমস্ত সারি পড়ে, সেগুলিতে হ্যাশ করে এবং যোগদানকারী সারিগুলির জন্য ফলাফলের হ্যাশ বালতিতে সারিগুলি পরীক্ষা করে ""

এই পোস্টে যা লিঙ্ক:

http://blogs.msdn.com/b/craigfr/archive/2006/08/10/687630.aspx

আছে HTH


সুতরাং এটি যদি কেবল আইডি ক্ষেত্র হয় তবে আমার ধারণা আমি কোনও আইডি ফিল্ড হ্যাশ করার সুবিধা বুঝতে পারছি না?
কাইল ব্র্যান্ড

ক্রেগ ফ্রিডম্যানের ব্লগের লিঙ্কের জন্য +1, আরও যোগ করুন নিবন্ধগুলি পাওয়া যায়: ব্লগস.এমএসএন
জেফ

9

একটি সংখ্যার ক্ষেত্র হ্যাশ করার সুবিধাটি হ'ল আপনি একটি বড় মান নিচ্ছেন এবং এটিকে ছোট ছোট টুকরো টুকরো টুকরো টুকরো টুকরো করে দিন যাতে এটি একটি হ্যাশ টেবিলের সাথে ফিট করতে পারে।

এখানে গ্র্যান্ট ফ্রেঞ্চি কীভাবে এটি বর্ণনা করে:

"অন্যদিকে, একটি হ্যাশ টেবিল হ'ল একটি ডেটা স্ট্রাকচার যা উপাদানগুলিকে দ্রুত অ্যাক্সেসের অনুমতি দেওয়ার জন্য সমস্ত উপাদানকে সমান আকারের বিভাগে বা বালতিগুলিতে ভাগ করে দেয় The , আপনি একটি টেবিল থেকে একটি সারি নিতে পারেন, এটি একটি হ্যাশ মানে হ্যাশ করতে পারেন, তারপরে হ্যাশ মানটি হ্যাশ টেবিলের মধ্যে সঞ্চয় করতে পারেন।

আপনি নিম্নলিখিত নিবন্ধের একটি লিঙ্ক থেকে তার ইবুক "বিচ্ছিন্ন এসকিউএল সার্ভার এক্সিকিউশন প্ল্যানস" এর একটি অনুলিপি পেতে পারেন:

সূত্র: http://www.simple-talk.com/sql/performance/ographicical-execution-plans-for-simple-sql-queries/



এসকিউএল সার্ভার এক্সিকিউশন প্ল্যানগুলি বিচ্ছিন্ন করেও আমি আমার পথে কাজ করছি - এটি দুর্দান্ত! তবে আমি এই পয়েন্টটিতে কিছুটা আটকে গিয়েছি :
কাইল ব্র্যান্ড্ট

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