মূল কন্টেন্টে যান
মডিউল 10 · 1-এর পাঠ 4কোর্সে 37/57~15 min
মডিউল পাঠ (1/4)

সূচক এবং বি-বৃক্ষ

কিভাবে একটি ডাটাবেস এক সেকেন্ডের ভগ্নাংশে লক্ষ লক্ষ সারির মধ্যে একটি একক রেকর্ড খুঁজে পেতে পারে?

ডিফল্টরূপে, যখন আমরা SELECT * FROM customers WHERE city = 'Milano' কে জিজ্ঞাসা করি, পোস্টগ্রেসকে একটি ক্রমিক স্ক্যান করতে হবে: এটি শারীরিকভাবে ডিস্কের সারি থেকে সারি সারি থেকে পুরো টেবিলটি পড়ে, প্রতিটি শহরকে "Milano" এর সাথে তুলনা করে। যখন একটি টেবিল লক্ষ লক্ষ রেকর্ড ধারণ করে, তখন এই প্রক্রিয়াটি কর্মক্ষমতাকে বিকল করে দেয়।

এই বাধাগুলির প্রধান কাঠামোগত উত্তর হল সূচী।

সূচক (বি-বৃক্ষ)

সূচীগুলি একটি বড় বইয়ের পিছনের বিশ্লেষণাত্মক সূচকের মতোই কাজ করে। এটি "মিলানো" সম্পর্কে কোথায় কথা বলে তা খুঁজে বের করার জন্য পুরো বইটি পড়ার পরিবর্তে, আমরা পিছনের পৃষ্ঠাগুলি দেখি যেখানে "Milano" শব্দটি আমাদেরকে [p. 45, 114, 230] এ পুনঃনির্দেশ করে৷ ডাটাবেস, পর্দার আড়ালে, এই আলাদা, খুব কমপ্যাক্ট ডেটা স্ট্রাকচার তৈরি করে (প্রায়শই একটি "বি-ট্রি") প্রশ্নে কলাম বা কলাম দ্বারা আদেশ করা হয়, যা মিলিত সারিগুলির শারীরিক স্টোরেজের সরাসরি নির্দেশক ধারণ করে।

SQL
-- Creare un indice semplice
CREATE INDEX idx_customers_city ON customers(city);

এই একক অপারেশন পোস্টগ্রেস ইঞ্জিনকে ট্রিগার করে, যা ব্যাকগ্রাউন্ডে সমস্ত city মান বের করে এবং সূচক করবে। একবার সম্পূর্ণ হলে, প্রতিটি পরবর্তী SELECT ... WHERE city = '...' উড়বে!

প্রাথমিক কী এবং স্বতন্ত্রতা

আপনি কি জানেন যে প্রাথমিক কী (PRIMARY KEY) এবং UNIQUE মূল নিয়মগুলি গোপনে হুডের নীচে সূচী ব্যবহার করে? যেহেতু DB অবশ্যই নিশ্চিত করবে যে সারিগুলি সন্নিবেশ বা পরিবর্তন করার সময় একটি ইমেল বা আইডি কখনই সদৃশ নয়, পোস্টগ্রেএসকিউএল স্বয়ংক্রিয়ভাবে তাদের উপরে একটি অন্তর্নিহিত বি-ট্রি সূচক তৈরি করে: এইভাবে অনন্যতা পরীক্ষায় মাইক্রোসেকেন্ড সময় লাগে।

এই কারণেই ID ফিল্ডে যোগদানগুলি অবিশ্বাস্যভাবে কার্যকারিতাপূর্ণ৷

একটি সূচক ড্রপ

আপনি যদি বুঝতে পারেন যে ভারী প্রশ্নগুলি পরিবর্তিত হয়েছে এবং একটি সূচকের সাথে কখনও পরামর্শ করা হয় না, তাহলে এটিকে ধ্বংস করা এবং গুরুত্বপূর্ণ স্থান পুনরুদ্ধার করা বুদ্ধিমানের কাজ:

SQL
DROP INDEX idx_customers_city;

তোমার পালা

ব্যায়াম#sql.m10.l1.e1
প্রচেষ্টা: 0লোড হচ্ছে...

আমাদের ই-কমার্সে আমরা ড্যাশবোর্ডের মাধ্যমে লক্ষ্য করি যে আমরা প্রায়শই জাতীয়তা অনুসারে গ্রাহকদের ফিল্টার করি (গ্রাহকদের দেশের কলাম)। \nদেশের কলামে একটি নতুন বেস ইনডেক্স তৈরি করুন এবং এর নাম দিন 'idx_customers_country'।

সম্পাদক লোড হচ্ছে...
ইঙ্গিত দেখান

টেবিল_নাম(কলাম_নাম) ON INDEX index_name তৈরি করুন ব্যবহার করুন;

সমাধান 3 প্রচেষ্টার পরে উপলব্ধ

সেকেন্ডারি অনন্য সূচক অন্বেষণ

ব্যায়াম#sql.m10.l1.e2
প্রচেষ্টা: 0লোড হচ্ছে...

একটি B-Tree সূচক তৈরির সময় একটি অনন্য সীমাবদ্ধতা অনুকরণ করতে এবং যৌক্তিক অভিপ্রায়কে সুস্পষ্ট এবং প্রয়োগ করার সময় লুকআপের গতি বাড়ানোর জন্যও ব্যবহার করা যেতে পারে৷\n\nএকটি নতুন সূচক তৈরি করুন যেখানে আপনি অনন্য কীওয়ার্ড ঘোষণা করবেন৷ এটিকে সংজ্ঞায়িত করুন যাতে এটি অন্য ব্যবহারকারীদের থেকে যেকোন অবাঞ্ছিত সদৃশ সাইন-আপগুলিকে ব্লক করে, 'গ্রাহকদের' 'ইমেল' কলামে স্বতন্ত্রতা বাধ্য করে, এবং এটিকে 'idx_unique_email_customer' নাম দিন।

সম্পাদক লোড হচ্ছে...
ইঙ্গিত দেখান

টেবিলে (কলাম) ক্রিয়েট ইউনিক ইনডেক্স ইনডেক্স_নাম লিখুন;

সমাধান 3 প্রচেষ্টার পরে উপলব্ধ