INCLUDEকী-কলামগুলির চেয়ে বেশি পছন্দ করার একটি কারণ যদি আপনার কীতে কলামটির প্রয়োজন না হয় তা হ'ল ডকুমেন্টেশন। এটি ভবিষ্যতে বিবর্তিত সূচকে আরও অনেক সহজ করে তোলে।
আপনার উদাহরণ বিবেচনা:
CREATE INDEX idx1 ON MyTable (Col1) INCLUDE (Col2, Col3)
আপনার ক্যোয়ারীটি এমন দেখাচ্ছে যদি সেই সূচকটি সেরা:
SELECT col2, col3
FROM MyTable
WHERE col1 = ...
আপনি INCLUDEকী অংশে অতিরিক্ত সুবিধা পেতে পারেন তা অবশ্যই আপনার কলামগুলি লাগানো উচিত নয় । নিম্নলিখিত উভয় প্রশ্নেরই col2সূচকের কীতে কলামটি আসলে পছন্দ করবে ।
SELECT col2, col3
FROM MyTable
WHERE col1 = ...
AND col2 = ...
SELECT TOP 1 col2, col3
FROM MyTable
WHERE col1 = ...
ORDER BY col2
এর অনুমান করা এই হল যাক না কেস এবং আমরা আছে col2যে INCLUDEধারা না থাকায় শুধু সূচক বৃক্ষ অংশে এটা থাকার কোন লাভ।
দ্রুত কয়েক বছর এগিয়ে।
আপনার এই ক্যোয়ারির টিউন করা দরকার:
SELECT TOP 1 col2
FROM MyTable
WHERE col1 = ...
ORDER BY another_col
এই ক্যোয়ারীটি অনুকূল করতে, নিম্নলিখিত সূচকটি দুর্দান্ত হবে:
CREATE INDEX idx1 ON MyTable (Col1, another_col) INCLUDE (Col2)
যদি আপনি এই টেবিলটিতে ইতিমধ্যে আপনার সূচকগুলি পরীক্ষা করে থাকেন তবে আপনার পূর্ববর্তী সূচকটি এখনও সেখানে থাকতে পারে:
CREATE INDEX idx1 ON MyTable (Col1) INCLUDE (Col2, Col3)
এখন আপনি তা জানেন Col2এবং Col3সূচক গাছের অংশ নন এবং এটি পঠন সূচির পরিসর সংকীর্ণ করতে বা সারিগুলি অর্ডার করার জন্য ব্যবহৃত হয় না। another_columnইন্ডেক্সের মূল অংশটির শেষে (পরে col1) যুক্ত করা বরং নিরাপদ । কিছু ভাঙার ঝুঁকি কম:
DROP INDEX idx1 ON MyTable;
CREATE INDEX idx1 ON MyTable (Col1, another_col) INCLUDE (Col2, Col3);
সেই সূচকটি আরও বড় হয়ে উঠবে, যার এখনও কিছু ঝুঁকি রয়েছে, তবে নতুন সূচনার তুলনায় বিদ্যমান সূচীগুলি বাড়ানো সাধারণত ভাল।
আপনার যদি একটি সূচক ছাড়া থাকে INCLUDE, আপনি another_colঠিক কী পরে যুক্ত করে কোন প্রশ্নগুলি ভাঙবেন তা আপনি জানতে পারবেন না Col1।
CREATE INDEX idx1 ON MyTable (Col1, Col2, Col3)
যদি আপনি এবং এর another_colমধ্যে যোগ করেন তবে কী হবে ? অন্যান্য প্রশ্নের ক্ষতি হবে?Col1Col2
INCLUDEবনাম কী কলামগুলির অন্যান্য "সুবিধা" রয়েছে যদি আপনি এই কলামগুলি কেবল টেবিল থেকে আনতে না চান তবে তা যুক্ত করুন । যাইহোক, আমি ডকুমেন্টেশন দিকটিকে সবচেয়ে গুরুত্বপূর্ণ হিসাবে বিবেচনা করি।
আপনার প্রশ্নের উত্তর দিতে:
ইনক্লুড ক্লজটি সহ বা ছাড়াই কোনও প্রচ্ছদ সূচক তৈরি করতে হবে তা নির্ধারণে আপনি কোন গাইডলাইনসের পরামর্শ দিবেন?
আপনি যদি টেবিলটি না দেখে সূচকে এই কলামটি উপলভ্য করার একমাত্র উদ্দেশ্যে সূচকে একটি কলাম যুক্ত করেন তবে এটিকে INCLUDEধারাটিতে রেখে দিন।
যদি সূচী কীতে কলামটি যুক্ত করা হয় তবে অতিরিক্ত সুবিধা (যেমন এর জন্য order byবা এটি পড়ার সূচির পরিসরকে সংকুচিত করতে পারে) এটিকে কীটিতে যুক্ত করুন।
আপনি এই সম্পর্কে একটি দীর্ঘ আলোচনা পড়তে পারেন:
https://use-the-index-luke.com/blog/2019-04/include-columns-in-btree-indexes