আমি এই প্রশ্নটি সম্পর্কে কিছুটা খনন করার সিদ্ধান্ত নিয়েছি এবং আমি কীভাবে কখন ব্যবহার করব বা কখন আরও ভাল, ক্লাস্টারবিহীন সূচকের (বাধ্যতামূলক) ব্যবহার না করে সে সম্পর্কে কথা বলার কিছু আকর্ষণীয় নথি খুঁজে পেয়েছি।
জন আইজব্রেনারের মন্তব্য অনুসারে পরামর্শ হিসাবে , অন্যতম উল্লেখযোগ্য, এমনকি অন্যের ব্লগে, কিম্বারলি এল ট্রিপের এই আকর্ষণীয় নিবন্ধটি:
তবে এটি একমাত্র নয়, আপনি যদি আগ্রহী হন তবে আপনি এই পৃষ্ঠাগুলি একবার দেখে নিতে পারেন:
আপনি দেখতে পাচ্ছেন, এগুলি সবাই টিপিং পয়েন্টের ধারণার চারপাশে ঘুরে বেড়ায় ।
কেএল ট্রিপ নিবন্ধ থেকে উদ্ধৃত
টিপিং পয়েন্ট কী?
এটি সেই বিন্দু যেখানে ফিরে আসা সারির সংখ্যাটি " আর যথেষ্ট নির্বাচনী নয় "। এসকিউএল সার্ভার সম্পর্কিত তথ্য সারিগুলি অনুসন্ধান করার জন্য নন-ক্লাস্টারড সূচকটি ব্যবহার না করা এবং তার পরিবর্তে একটি টেবিল স্ক্যান সম্পাদন করে।
এসকিউএল সার্ভার যখন একটি হিপে একটি নন-ক্লাস্টারড ইনডেক্স ব্যবহার করে, মূলত এটি বেস টেবিলের পৃষ্ঠাগুলিতে পয়েন্টারগুলির একটি তালিকা পায়। তারপরে এটি রো আইডি লুকআপস (আরআইডি) নামক ক্রিয়াকলাপের সাহায্যে সারিগুলি পুনরুদ্ধার করতে এই পয়েন্টারগুলি ব্যবহার করে। এর অর্থ হ'ল কমপক্ষে, এটি যতগুলি পাতার পাঠানো সারিগুলির সংখ্যা হিসাবে পাঠ করবে এবং সম্ভবত আরও কিছু ব্যবহার করবে। প্রক্রিয়াটি কিছুটা একই ফলাফল সহ বেস টেবিলের মতো ক্লাস্টারযুক্ত সূচকের সাথে একই রকম: আরও পড়ুন।
কিন্তু, যখন এই টিপিং পয়েন্টটি ঘটে?
অবশ্যই এই জীবনের বেশিরভাগ জিনিস হিসাবে, এটি নির্ভর করে ...
কোনও সিরিয়াসলি নয়, এটি প্রতি পৃষ্ঠায় কত সারি নির্ভর করে সারণীতে পৃষ্ঠাগুলির সংখ্যার 25% থেকে 33% এর মধ্যে ঘটে। তবে আরও কিছু কারণ রয়েছে যা আপনার বিবেচনা করা উচিত:
আইটিপিআরটোডে নিবন্ধ থেকে উদ্ধৃত
টিপিং পয়েন্টকে প্রভাবিত করে এমন অন্যান্য বিষয়গুলি যদিও আরআইডি লুকআপগুলির ব্যয় টিপিং পয়েন্টকে প্রভাবিত করে এমন সবচেয়ে গুরুত্বপূর্ণ বিষয়, তবে আরও কয়েকটি কারণ রয়েছে:
- একটি ক্লাস্টার্ড সূচক স্ক্যান করার সময় শারীরিক I / O অনেক বেশি দক্ষ। ক্লাস্টারড ইনডেক্স ডেটা ক্রম অনুসারে ডিস্কে সূচক ক্রমে স্থাপন করা হয়। ফলস্বরূপ, ডিস্কে খুব সামান্য পার্শ্বীয় মাথা ভ্রমণ আছে, যা I / O কার্যকারিতা উন্নত করে।
- যখন ডাটাবেস ইঞ্জিন একটি ক্লাস্টার্ড সূচকটি স্ক্যান করছে, তখন এটি জানে যে ডিস্ক ট্র্যাকের পরবর্তী কয়েকটি পৃষ্ঠায় এখনও এটির প্রয়োজনীয় ডেটা থাকবে। সুতরাং, এটি সাধারণ 8KB পৃষ্ঠাগুলির পরিবর্তে 64KB অংশে পড়া শুরু করে। এর ফলে দ্রুত আই / ওও হয়।
এখন আমি যদি আমার কোয়েরিগুলি আবার পরিসংখ্যান আইও ব্যবহার করে চালিত করি:
SET STATISTICS IO ON;
SELECT id, foo, bar, nki FROM my_table WHERE nki < 20000 ORDER BY nki ;
SET STATISTICS IO OFF;
Logical reads: 312
SET STATISTICS IO ON;
SELECT id, foo, bar, nki FROM my_table WITH(INDEX(IX_my_TABLE));
SET STATISTICS IO OFF;
Logical reads: 41293
দ্বিতীয় ক্যোয়ারির প্রথমটির চেয়ে আরও লজিকাল রিডের প্রয়োজন।
আমার কি ক্লাস্টারযুক্ত সূচি এড়ানো উচিত?
না, একটি ক্লাস্টার্ড সূচকটি কার্যকর হতে পারে তবে আপনি এটি অর্জন করার জন্য যা চেষ্টা করছেন তা বিশ্লেষণ করে সময় নেওয়া এবং অতিরিক্ত চেষ্টা করা সমান।
কেএল ট্রিপ নিবন্ধ থেকে উদ্ধৃত
তাহলে এখন তোমার কি করা উচিত? এটা নির্ভর করে. আপনি যদি নিজের ডেটাটি ভাল জানেন এবং আপনি কোনও হিন্ট ব্যবহার করে বিবেচনা করতে পারেন এমন কিছু বিস্তৃত টেস্টিং করেন (এমন কিছু চতুর কাজ রয়েছে যা আপনি এসপিএসে প্রোগ্রামগতভাবে করতে পারেন, আমি চেষ্টা করব এবং শীঘ্রই এটিতে একটি পোস্ট উত্সর্গ করব)। যাইহোক, একটি আরও ভাল পছন্দ (যদি সম্ভব হয় তবে) আচ্ছাদন বিবেচনা করা (এটি সত্যই আমার মূল বিষয় :)। আমার অনুসন্ধানগুলিতে, আচ্ছাদনটি অবাস্তব কারণ আমার প্রশ্নগুলি সমস্ত কলামগুলি চায় (অশুভ নির্বাচন করুন *) তবে, যদি আপনার প্রশ্নগুলি সংকীর্ণ হয় এবং সেগুলি উচ্চ-অগ্রাধিকারের হয় তবে আপনি একটি ইঙ্গিতের চেয়ে একটি কভারিং সূচী (অনেক ক্ষেত্রে) ছাড়াই ভাল because এমন একটি সূচি যা কোনও ক্যোয়ারিকে কভার করে, টিপসটি কখনও নয়।
এটি আপাতত ধাঁধার উত্তর তবে ডুব দেওয়ার মতো আরও অনেক কিছু আছে। টিপিং পয়েন্টটি খুব ভাল জিনিস হতে পারে - এবং এটি সাধারণত ভালভাবে কাজ করে। তবে, যদি আপনি খুঁজে পান যে আপনি কোনও সূচককে বাধ্য করতে পারেন এবং আরও ভাল পারফরম্যান্স পেতে পারেন তবে আপনি কিছু তদন্ত করতে চাইতে পারেন এবং দেখুন এটি কিনা। তারপরে একটি ইঙ্গিতটি কীভাবে সাহায্য করতে পারে তা বিবেচনা করুন এবং এখন আপনি জানেন কোথায় আপনি মনোযোগ দিতে পারেন।