৬.৬ ডেটাবেজ সর্টিং এবং ইনডেক্সিং (Database Sorting and Indexing)

এইচএসসি আইসিটি অধ্যায় ৬: ডেটাবেজ সর্টিং ও ইনডেক্সিং। তথ্যের বিন্যাস (Sorting) এবং দ্রুত অনুসন্ধানের জন্য ইনডেক্সিং (Indexing) প্রযুক্তির কার্যপদ্ধতি, সুবিধা ও

শেখা শুরু করুন

HSC ICT Chapter 6.6: Database Sorting and Indexing (ডেটাবেজ সর্টিং এবং ইনডেক্সিং)

  1. ডেটাবেজ সর্টিং এবং ইনডেক্সিং
  2. কেন সাজানো প্রয়োজন? (The Need for Order)
  3. সর্টিং (Sorting) কী?
  4. সর্টিং এর ব্যবহার (SQL Example)
  5. মাল্টি-লেভেল সর্টিং (Multi-level Sorting)
  6. ইনডেক্সিং (Indexing) কী?
  7. ইনডেক্সিং কীভাবে কাজ করে? (উপমা)
  8. সার্চিং অ্যালগরিদম ও ইনডেক্সিং
  9. পার্থক্য: সর্টিং বনাম ইনডেক্সিং
  10. ইনডেক্সিং এর সুবিধাসমূহ
  11. ইনডেক্সিং এর অসুবিধা (Trade-off)
  12. কখন ইনডেক্স ব্যবহার করব?
  13. সারসংক্ষেপ (Summary)

ডেটাবেজ সর্টিং এবং ইনডেক্সিং

এই লেকচার শেষে আমরা-

১। ডেটাবেজ সর্টিং (Sorting) কী এবং এর প্রকারভেদ ব্যাখ্যা করতে পারব।
২। ডেটাবেজ ইনডেক্সিং (Indexing) এর ধারণা ও প্রয়োজনীয়তা বর্ণনা করতে পারব।
৩। সর্টিং এবং ইনডেক্সিং এর মধ্যে পার্থক্য নির্ণয় করতে পারব।
৪। ইনডেক্সিং এর সুবিধা ও অসুবিধা বিশ্লেষণ করতে পারব।

সবাইকে স্বাগতম আজকের আইসিটি ক্লাসে! আমরা অধ্যায় ৬ অর্থাৎ ডেটাবেজ ম্যানেজমেন্ট সিস্টেম নিয়ে আলোচনা করছি। আজকের টপিকটি খুবই ইন্টারেস্টিং এবং গুরুত্বপূর্ণ—ডেটাবেজ সর্টিং এবং ইনডেক্সিং। এই লেকচার শেষে আমরা ১। ডেটাবেজ সর্টিং কী এবং এর প্রকারভেদ ব্যাখ্যা করতে পারব, ২। ডেটাবেজ ইনডেক্সিং এর ধারণা ও প্রয়োজনীয়তা বর্ণনা করতে পারব, ৩। সর্টিং এবং ইনডেক্সিং এর মধ্যে পার্থক্য নির্ণয় করতে পারব এবং ৪। ইনডেক্সিং এর সুবিধা ও অসুবিধা বিশ্লেষণ করতে পারব। চলো তাহলে শুরু করা যাক!

কেন সাজানো প্রয়োজন? (The Need for Order)

প্রশ্ন: একটি ডিকশনারিতে যদি শব্দগুলো A-Z ক্রমে সাজানো না থাকত, তবে 'Tiger' শব্দটি খুঁজে বের করতে কতক্ষণ লাগত?

  • উত্তর: প্রতিটি শব্দ শুরু থেকে শেষ পর্যন্ত পড়তে হতো।
  • সিদ্ধান্ত: লক্ষ লক্ষ ডেটার মধ্যে নির্দিষ্ট তথ্য দ্রুত খোঁজার জন্য ডেটা সুবিন্যস্ত থাকা জরুরি।

শুরুতেই একটা মজার প্রশ্ন করি তোমাদের। ধরো, তোমার হাতে একটা ডিকশনারি আছে, কিন্তু সেটিতে শব্দগুলো A, B, C এভাবে সাজানো নেই। সব শব্দ এলোমেলো। এখন আমি যদি তোমাকে বলি 'Tiger' শব্দটি খুঁজে বের করতে, তোমার কতক্ষণ লাগবে? অসম্ভব ব্যাপার, তাই না? তোমাকে প্রথম পৃষ্ঠা থেকে প্রতিটি শব্দ পড়ে পড়ে দেখতে হতো। কিন্তু ডিকশনারি সাজানো থাকে বলেই আমরা কয়েক সেকেন্ডে শব্দ খুঁজে পাই। ডেটাবেজেও ঠিক তাই। লক্ষ লক্ষ রেকর্ডের মধ্যে কোনো তথ্য দ্রুত খোঁজার জন্য আমাদের সর্টিং এবং ইনডেক্সিং প্রয়োজন হয়।

সর্টিং (Sorting) কী?

সংজ্ঞা: ডেটাবেজ টেবিলের রেকর্ডগুলোকে কোনো নির্দিষ্ট ফিল্ডের (Field) মানের ওপর ভিত্তি করে ক্রমানুসারে সাজানোকে সর্টিং বলে।

প্রকারভেদ:
১। অ্যাসেন্ডিং (Ascending): ছোট থেকে বড় ক্রমে সাজানো।
- সংখ্যা: $0 \rightarrow 9$
- অক্ষর: $A \rightarrow Z$

২। ডিসেন্ডিং (Descending): বড় থেকে ছোট ক্রমে সাজানো।
- সংখ্যা: $9 \rightarrow 0$
- অক্ষর: $Z \rightarrow A$

প্রথমে আসি সর্টিং বা বিন্যাসকরণ কী? খুব সহজ ভাষায়, ডেটাবেজের টেবিলের ডেটাগুলোকে একটি নির্দিষ্ট অর্ডারে সাজানোই হলো সর্টিং। এই সাজানোটা দুইভাবে হতে পারে। এক, অ্যাসেন্ডিং (Ascending) বা আরোহী পদ্ধতি—যেখানে আমরা ছোট থেকে বড় ক্রমে সাজাই। যেমন সংখ্যা হলে ০ থেকে ৯, আর অক্ষর হলে A থেকে Z। আর দুই, ডিসেন্ডিং (Descending) বা অবরোহী পদ্ধতি—ঠিক উল্টোটা, অর্থাৎ বড় থেকে ছোট। যেমন ৯ থেকে ০ বা Z থেকে A।

সর্টিং এর ব্যবহার (SQL Example)

SQL কমান্ড: ORDER BY

উদাহরণ: পরীক্ষার রেজাল্ট শিট জিপিএ (GPA) অনুযায়ী সাজানো।

SQL Query:

SELECT * FROM Result
ORDER BY GPA DESC;

এই কুয়েরিটি GPA এর ভিত্তিতে বড় থেকে ছোট ক্রমে রেকর্ডগুলো দেখাবে।

ডেটাবেজে আমরা যখন কুয়েরি করি, তখন এই সর্টিং করার জন্য `ORDER BY` ক্লজ ব্যবহার করি। ধরো, তোমাদের ক্লাসের রেজাল্ট শিট তৈরি করা হবে। যার জিপিএ সবচেয়ে বেশি, তার নাম সবার উপরে থাকবে। তাহলে আমরা জিপিএ এর ওপর ভিত্তি করে Descending বা বড় থেকে ছোট ক্রমে সাজাব। স্ক্রিনে দেখো, `ORDER BY GPA DESC` লিখলে কম্পিউটার অটোমেটিকালি সবচেয়ে বেশি জিপিএ পাওয়া ছাত্রের নাম সবার আগে দেখাবে।

মাল্টি-লেভেল সর্টিং (Multi-level Sorting)

একই সাথে একাধিক ফিল্ডের ওপর ভিত্তি করে সর্টিং করা।

উদাহরণ:
১. প্রথমে 'District' অনুযায়ী সাজানো ($A \rightarrow Z$)
২. এরপর একই জেলার মধ্যে 'Name' অনুযায়ী সাজানো ($A \rightarrow Z$)

ব্যবহার:
যখন একটি মাত্র ফিল্ড দিয়ে ডেটাকে সঠিকভাবে সুবিন্যস্ত করা যায় না, তখন এটি জটিল ডেটা অর্গানাইজেশনে ব্যবহৃত হয়।

অনেক সময় একটি মাত্র ফিল্ড দিয়ে সাজালে কাজ হয় না, তখন আমরা মাল্টি-লেভেল সর্টিং করি। বিষয়টা একটু বুঝিয়ে বলি। ধরো সারা বাংলাদেশের শিক্ষার্থীদের তালিকা করা হচ্ছে। প্রথমে আমরা জেলা অনুযায়ী সাজালাম—কুমিল্লা, ঢাকা, বরিশাল ইত্যাদি। এখন ঢাকার ভেতরে তো হাজার হাজার ছাত্র। তখন আমরা বললাম, ঠিক আছে, ঢাকার ভেতরে আবার তাদের নাম অনুযায়ী A-Z সাজাও। অর্থাৎ, প্রথমে জেলা, তারপর নাম। এটাই হলো মাল্টি-লেভেল সর্টিং।

ইনডেক্সিং (Indexing) কী?

সংজ্ঞা: ইনডেক্সিং হলো এমন একটি কৌশল বা ডেটা স্ট্রাকচার যা ডেটাবেজ থেকে তথ্য খোঁজার (Search) গতি বহুগুণ বাড়িয়ে দেয়।

মূল ধারণা:
- মূল ডেটা ফাইল এলোমেলো (Unsorted) থাকতে পারে।
- কিন্তু আলাদা একটি ইনডেক্স ফাইলে ডেটার ঠিকানা (Pointer/Address) সাজিয়ে রাখা হয়।
- এটি বইয়ের পেছনের 'নির্ঘণ্ট' বা Index-এর মতো কাজ করে।

এবার আসি আমাদের আজকের সবচেয়ে গুরুত্বপূর্ণ টপিকে—ইনডেক্সিং। সর্টিং তো বুঝলাম সাজানো, কিন্তু ইনডেক্সিং কী? ইনডেক্সিং হলো এমন একটি টেকনিক যা ডেটা খোঁজার গতিকে রকেটের মতো ফাস্ট করে দেয়! সহজ কথায়, এটি একটি বিশেষ ডেটা স্ট্রাকচার যা ব্যবহার করে ডেটাবেজ খুব দ্রুত স্পেসিফিক রেকর্ড খুঁজে পায়। মনে রাখবে, ইনডেক্সিং মূল টেবিলের ডেটা ওলট-পালট করে না, বরং আলাদা একটা ফাইলে তথ্যের ঠিকানা বা রেফারেন্স টুকে রাখে।

ইনডেক্সিং কীভাবে কাজ করে? (উপমা)

বইয়ের উদাহরণ:

  • ইনডেক্স ছাড়া: পুরো বইয়ের প্রতিটি লাইন পড়ে একটি শব্দ খোঁজা। একে বলে Linear Search। (সময়সাপেক্ষ)

  • ইনডেক্স সহ: বইয়ের শেষের 'নির্ঘণ্ট' বা Index দেখে সরাসরি পৃষ্ঠা নম্বরে চলে যাওয়া। (দ্রুতগতি)

ডেটাবেজ ইনডেক্স ঠিক এভাবেই কাজ করে।

ইনডেক্সিং কীভাবে কাজ করে তা বোঝার জন্য তোমার পাঠ্যবইয়ের কথা ভাবো। ধরো তোমাকে বইয়ের ভেতর 'ডেটাবেজ' শব্দটি কোথায় আছে বের করতে বললাম। তুমি কি প্রথম পৃষ্ঠা থেকে পড়া শুরু করবে? না! তুমি বইয়ের একেবারে শেষ পৃষ্ঠায় 'Index' বা নির্ঘণ্ট অংশে যাবে। সেখানে 'ড' দিয়ে খুঁজবে, দেখবে 'ডেটাবেজ' শব্দের পাশে পৃষ্ঠা নম্বর লেখা আছে। তুমি সরাসরি সেই পৃষ্ঠায় চলে যাবে। ডেটাবেজ ইনডেক্সিং ঠিক এই কাজটাই করে। এটি কম্পিউটারকে বলে দেয়—'পুরো হার্ডডিস্ক খোঁজার দরকার নেই, এই ঠিকানায় যাও, তথ্য পেয়ে যাবে'!

সার্চিং অ্যালগরিদম ও ইনডেক্সিং

কিভাবে দ্রুত খোঁজে?

  • লিনিয়ার সার্চ (Linear Search): ডেটাবেজের শুরু থেকে শেষ পর্যন্ত ১টি করে ক্রমানুসারে খোঁজা। (ধীরগতি)

  • বাইনারি সার্চ (Binary Search) / B-Tree: ডেটাকে বারবার অর্ধেক করে ভাগ করে খোঁজা। (অত্যন্ত দ্রুতগতি)

ইনডেক্সিং সাধারণত B-Tree বা Balanced Tree মেথড ব্যবহার করে সার্চ টাইম কমিয়ে আনে।

টেকনিক্যালি বলতে গেলে, ইনডেক্স ছাড়া কম্পিউটার 'লিনিয়ার সার্চ' করে, অর্থাৎ একের পর এক চেক করে, যা অনেক ধীরগতির। কিন্তু ইনডেক্স করা থাকলে সে 'বাইনারি সার্চ' বা 'B-Tree' মেথড ব্যবহার করে। বিষয়টা অনেকটা 'গেম অফ হাই-লো' এর মতো। আমি যদি ১ থেকে ১০০ এর মধ্যে একটা সংখ্যা ভাবি, আর তুমি যদি মাঝখান থেকে অর্থাৎ ৫০ থেকে অনুমান শুরু করো, তাহলে খুব দ্রুত সংখ্যাটা ধরতে পারবে। ইনডেক্সিং এই মেথডেই সার্চ টাইম কমিয়ে আনে।

পার্থক্য: সর্টিং বনাম ইনডেক্সিং

বৈশিষ্ট্য সর্টিং (Sorting) ইনডেক্সিং (Indexing)
উদ্দেশ্য ডেটা সাজিয়ে উপস্থাপন করা (Display) দ্রুত খোঁজার গতি বাড়ানো (Search Speed)
মেমোরি অতিরিক্ত জায়গা লাগে না আলাদা ইনডেক্স ফাইলের জন্য মেমোরি লাগে
আউটপুট রেকর্ডের ভৌত ক্রম পরিবর্তন হয় মূল ডেটার ক্রম ঠিক থাকে, লজিক্যাল পয়েন্টার তৈরি হয়

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

ইনডেক্সিং এর সুবিধাসমূহ

১। দ্রুত গতির সার্চ: ডেটা সার্চ বা কুয়েরি প্রসেসিং অত্যন্ত দ্রুত হয়।

২। দক্ষতা বৃদ্ধি: রিপোর্ট জেনারেশন বা ডেটা রিট্রিভাল ফাস্ট হয়, যা বড় ডেটাবেজের পারফরম্যান্স বাড়ায়।

৩। সময় সাশ্রয়: ব্যবহারকারীকে কাঙ্ক্ষিত তথ্যের জন্য দীর্ঘক্ষণ অপেক্ষা করতে হয় না।

তাহলে ইনডেক্সিং কেন করব? প্রধান কারণ—গতি। যখন তোমার ডেটাবেজে লক্ষ লক্ষ বা কোটি কোটি তথ্য থাকবে, ইনডেক্স ছাড়া একটা তথ্য খুঁজতেই কয়েক মিনিট লেগে যেতে পারে। ইনডেক্স থাকলে সেটা মিলি-সেকেন্ডে হয়ে যাবে। বড় বড় কোম্পানি যেমন Facebook বা Google তাদের ডেটাবেজে ইনডেক্সিং ব্যবহার করে বলেই আমরা সার্চ দিলেই রেজাল্ট পেয়ে যাই।

ইনডেক্সিং এর অসুবিধা (Trade-off)

১। অতিরিক্ত মেমোরি: ইনডেক্স ফাইলের জন্য হার্ডডিস্কে অতিরিক্ত জায়গার (Storage Space) প্রয়োজন হয়।

২। ধীরগতির আপডেট: ডেটা এন্ট্রি (INSERT), আপডেট (UPDATE) ও ডিলিট (DELETE) অপারেশন ধীরগতির হয়।

কারণ: প্রতিবার মূল টেবিলে ডেটা পরিবর্তন করলে, ইনডেক্স ফাইলেও তা আপডেট করতে হয়।

সবকিছুরই একটা খরচ আছে, ইনডেক্সিং এরও আছে। ইনডেক্সিং এর সবচেয়ে বড় অসুবিধা হলো, এটি ডেটা এন্ট্রি বা আপডেট স্লো করে দেয়। কেন? কারণ যখনই তুমি নতুন ডেটা ইনপুট দাও, কম্পিউটারকে দুই জায়গায় লিখতে হয়—একবার মূল টেবিলে, আবার ইনডেক্স ফাইলে গিয়ে সেটা সাজাতে হয়। এজন্য আমরা সব কলামে ইনডেক্স করি না, শুধু যেগুলো দিয়ে বেশি সার্চ করা হয়, সেগুলোতে ইনডেক্স করি। এছাড়া ইনডেক্স ফাইল হার্ডডিস্কে বেশ খানিকটা জায়গা দখল করে।

কখন ইনডেক্স ব্যবহার করব?

ব্যবহার করব যখন:
- টেবিলে অনেক বেশি রেকর্ড থাকে।
- যে ফিল্ড বা কলাম দিয়ে সচরাচর সার্চ করা হয় (যেমন: ID, Mobile No)।
- প্রাইমারি কি (Primary Key) ফিল্ডে।

ব্যবহার করব না যখন:
- টেবিল খুব ছোট হয়।
- যে ফিল্ডে বারবার ডেটা পরিবর্তন/আপডেট হয়।
- যে কলামে অনেক নাল (Null) ভ্যালু থাকে।

তোমরা হয়তো ভাবছ, তাহলে কি সব ফিল্ডেই ইনডেক্স বসিয়ে দেব? একদম না। ইনডেক্স তখন ব্যবহার করবে যখন টেবিল অনেক বড় হবে এবং নির্দিষ্ট কিছু কলাম দিয়ে মানুষ বারবার সার্চ করবে, যেমন রোল নম্বর বা ফোন নম্বর। কিন্তু যে টেবিলে খুব কম ডেটা আছে বা যে ডেটা বারবার পরিবর্তন হয়, সেখানে ইনডেক্স ব্যবহার করলে লাভ তো হবেই না, বরং সিস্টেম স্লো হয়ে যাবে।

সারসংক্ষেপ (Summary)

১। সর্টিং: ডেটা সুবিন্যস্তভাবে সাজানো (Display focus)।
২। ইনডেক্সিং: দ্রুত ডেটা খোঁজার কৌশল (Performance focus)।
৩। সর্টিং ORDER BY দিয়ে করা হয়।
4। ইনডেক্সিং সার্চ ফাস্ট করে কিন্তু আপডেট ও ইনসার্ট স্লো করে।

পরবর্তী লেকচার: ডেটাবেজ রিলেশনশিপ

আজকে আমরা অনেক গুরুত্বপূর্ণ বিষয় শিখলাম। সংক্ষেপে মনে রাখবে—ডেটাকে সুন্দর করে সাজিয়ে দেখার জন্য হলো সর্টিং। আর ডেটাবেজের ভেতর থেকে চোখের পলকে তথ্য খুঁজে বের করার জাদুকরী কৌশল হলো ইনডেক্সিং। তবে ইনডেক্সিং এর সুবিধার পাশাপাশি স্টোরেজ ও আপডেটের অসুবিধার কথাও মাথায় রাখতে হবে। আশা করি কনসেপ্টটা তোমাদের কাছে পরিষ্কার হয়েছে। পরবর্তী লেকচারে আমরা নতুন টপিক নিয়ে কথা বলব। ততক্ষণ পর্যন্ত ভালো থেকো, আল্লাহ হাফেজ।

অধ্যায় ৬.৬: ডেটাবেজ সর্টিং এবং ইনডেক্সিং

পড়তে প্রায় 5 মিনিট

আধুনিক তথ্যপ্রযুক্তির যুগে ডেটাবেজ ম্যানেজমেন্ট সিস্টেমে (DBMS) বিশাল পরিমাণ ডেটা সংরক্ষিত থাকে। এই বিপুল ডেটাভান্ডার থেকে কাঙ্ক্ষিত তথ্য দ্রুত খুঁজে বের করা এবং সুশৃঙ্খলভাবে উপস্থাপন করা একটি বড় চ্যালেঞ্জ। যদি ডেটা এলোমেলোভাবে থাকে, তবে কোনো নির্দিষ্ট তথ্য খুঁজে পেতে অনেক সময় লাগে। ঠিক যেমন একটি ডিকশনারিতে শব্দগুলো যদি বর্ণানুক্রমিক না সাজানো থাকত, তবে একটি শব্দ খুঁজে বের করা প্রায় অসম্ভব হতো। এই সমস্যা সমাধানের জন্যই ডেটাবেজে সর্টিং (Sorting) এবং ইনডেক্সিং (Indexing) প্রযুক্তি ব্যবহার করা হয়। আজকের পাঠে আমরা এই দুটি গুরুত্বপূর্ণ ধারণা, তাদের কার্যপদ্ধতি এবং পার্থক্য সম্পর্কে বিস্তারিত জানব।

ডেটাবেজ সর্টিং (Database Sorting)

ডেটাবেজ টেবিলের রেকর্ডগুলোকে নির্দিষ্ট কোনো ফিল্ডের মানের ওপর ভিত্তি করে ক্রমানুসারে সাজানোর প্রক্রিয়াকে সর্টিং বলা হয়। যখন আমরা ডেটাবেজে নতুন কোনো রেকর্ড এন্ট্রি করি, তখন সেটি সাধারণত এলোমেলোভাবে বা ইনপুট দেওয়ার ক্রম অনুযায়ী জমা হয়। কিন্তু রিপোর্টিং বা বিশ্লেষণের জন্য ডেটাকে নির্দিষ্ট অর্ডারে সাজানো প্রয়োজন হয়।

সংজ্ঞা (Definition): ডেটাবেজ টেবিলের এক বা একাধিক ফিল্ডের (Column) মানের ওপর ভিত্তি করে রেকর্ডগুলোকে উর্ধ্বক্রম (Ascending) বা অধঃক্রম (Descending) অনুসারে সুবিন্যস্ত করার পদ্ধতিকে সর্টিং (Sorting) বলা হয়।

সর্টিং-এর প্রকারভেদ

সর্টিং প্রধানত দুই ধরণের হয়ে থাকে:

  1. অ্যাসেন্ডিং অর্ডার (Ascending Order): ছোট থেকে বড় বা A থেকে Z ক্রমানুসারে সাজানো।
    - সংখ্যা: ১, ২, ৩, ..., ১০০
    - টেক্সট: A, B, C, ..., Z
    - তারিখ: পুরোনো তারিখ থেকে নতুন তারিখ (যেমন: ১ জানুয়ারি ২০২৩, ২ জানুয়ারি ২০২৩)

  2. ডিসেন্ডিং অর্ডার (Descending Order): বড় থেকে ছোট বা Z থেকে A ক্রমানুসারে সাজানো।
    - সংখ্যা: ১০০, ৯৯, ..., ১
    - টেক্সট: Z, Y, ..., A
    - তারিখ: নতুন তারিখ থেকে পুরোনো তারিখ

মাল্টি-লেভেল সর্টিং (Multi-level Sorting)

অনেক সময় একটি মাত্র ফিল্ড দিয়ে সর্টিং করলে কাঙ্ক্ষিত ফলাফল পাওয়া যায় না। তখন একাধিক ফিল্ডের ওপর ভিত্তি করে সর্টিং করা হয়। একে মাল্টি-লেভেল সর্টিং বলা হয়। এক্ষেত্রে প্রথম ফিল্ডটিকে Primary Key এবং পরবর্তী ফিল্ডগুলোকে Secondary Key হিসেবে বিবেচনা করা হয়।

উদাহরণ (Example):
ধরি, একটি কলেজের রেজাল্ট শিট তৈরি করা হচ্ছে। প্রথমে আমরা চাই 'GPA' অনুযায়ী মেধা তালিকা তৈরি করতে। কিন্তু একাধিক ছাত্র একই GPA (যেমন ৫.০০) পেতে পারে। তখন যাদের GPA সমান, তাদের ক্ষেত্রে আমরা 'Total Marks' অনুযায়ী আবার সর্টিং করতে পারি।
- Primary Sort: GPA (Descending)
- Secondary Sort: Total Marks (Descending)

এভাবে ধাপে ধাপে সাজানোই হলো মাল্টি-লেভেল সর্টিং।

ডেটাবেজ ইনডেক্সিং (Database Indexing)

সর্টিং ডেটাকে সাজিয়ে প্রদর্শন করে, কিন্তু বিশাল ডেটাবেজ থেকে তথ্য খুঁজে বের করার (Searching) ক্ষেত্রে সর্টিং সবসময় কার্যকর নাও হতে পারে। এখানেই ইনডেক্সিং-এর ভূমিকা। বইয়ের পেছনে যেমন 'সূচিপত্র' বা Index থাকে যা দেখে আমরা দ্রুত কোনো টপিকের পৃষ্ঠা নম্বর বের করতে পারি, ডেটাবেজ ইনডেক্সিং ঠিক একইভাবে কাজ করে।

সংজ্ঞা (Definition): ইনডেক্সিং হলো ডেটাবেজের এমন একটি কৌশল যেখানে মূল ডেটা টেবিলের রেকর্ডগুলোর লজিক্যাল অর্ডার বজায় রাখার জন্য একটি স্বতন্ত্র ইনডেক্স ফাইল তৈরি করা হয়, যা ডেটা সার্চ বা কুয়েরি (Query) করার গতি বহুগুণ বাড়িয়ে দেয়।

ইনডেক্সিং কীভাবে কাজ করে?

ইনডেক্সিং করার সময় ডেটাবেজ সিস্টেম মূল ডেটা ফাইলের পাশাপাশি একটি ছোট 'ইনডেক্স ফাইল' তৈরি করে। এই ফাইলে দুটি প্রধান অংশ থাকে:
১. Search Key: যে ফিল্ডের ওপর ইনডেক্স করা হয়েছে (যেমন: Roll No বা Name)। এটি সাজানো থাকে।
২. Pointer: মূল ডেটা ফাইলে রেকর্ডটি কোথায় আছে, তার মেমোরি অ্যাড্রেস বা ঠিকানা।

Database Indexing Structure - Main Table vs Index Table

উপরের চিত্রটিতে লক্ষ্য করুন, মূল ফাইলে ডেটা এলোমেলো থাকতে পারে, কিন্তু ইনডেক্স ফাইলে 'Key' গুলো ক্রমানুসারে সাজানো এবং প্রতিটি Key-এর সাথে একটি তীর চিহ্ন (Pointer) আছে যা মূল ডেটাকে নির্দেশ করছে। এর ফলে কম্পিউটার পুরো টেবিল না খুঁজে (Linear Search) বাইনারি সার্চ (Binary Search) অ্যালগরিদম ব্যবহার করে অত্যন্ত দ্রুত ডেটা খুঁজে পায়।

লিনিয়ার সার্চের (ইনডেক্স ছাড়া) ক্ষেত্রে সর্বোচ্চ ধাপ সংখ্যা: $$N$$
বাইনারি সার্চের (ইনডেক্স সহ) ক্ষেত্রে সর্বোচ্চ ধাপ সংখ্যা: $$\log_2 N$$

যেখানে $N$ হলো মোট রেকর্ডের সংখ্যা। ১,০০০,০০০ রেকর্ডের জন্য ইনডেক্স ছাড়া ১০ লক্ষ বার খোঁজা লাগতে পারে, কিন্তু ইনডেক্স থাকলে মাত্র ২০ বার খুঁজলেই তথ্য পাওয়া সম্ভব!

ইনডেক্সিং-এর প্রকারভেদ

পরীক্ষার জন্য ইনডেক্সিং-এর প্রধান দুটি প্রকারভেদ জানা জরুরি:

  1. ক্লাস্টার্ড ইনডেক্স (Clustered Index):
    - এটি ডেটা ফাইলের রেকর্ডগুলোকে ফিজিক্যালি (বাস্তবে) সাজিয়ে রাখে।
    - একটি টেবিলে মাত্র একটি ক্লাস্টার্ড ইনডেক্স থাকতে পারে (সাধারণত Primary Key-এর ওপর)।
    - এটি অনেকটা ডিকশনারির মতো, যেখানে শব্দগুলো নিজেই সাজানো থাকে, আলাদা কোনো সূচিপত্র লাগে না।

  2. নন-ক্লাস্টার্ড ইনডেক্স (Non-Clustered Index):
    - এটি মূল ডেটাকে সাজায় না, বরং আলাদা একটি স্থানে ইনডেক্স তালিকা তৈরি করে।
    - একটি টেবিলে একাধিক নন-ক্লাস্টার্ড ইনডেক্স থাকতে পারে।
    - এটি বইয়ের পেছনের সূচিপত্র বা Index-এর মতো কাজ করে।

অনুধাবনমূলক প্রশ্ন: ইনডেক্সিং করলে ডেটা আপডেট ধীরগতি হয় কেন?

এটি পরীক্ষায় প্রায়ই আসা একটি গুরুত্বপূর্ণ প্রশ্ন। ইনডেক্সিং সার্চিং বা খোঁজার গতি বাড়ালেও, ডেটা ইনপুট (Insert), আপডেট (Update) বা ডিলিট (Delete) করার গতি কমিয়ে দেয়। এর কারণ হলো:

  1. দ্বৈত কাজ (Double Work): যখনই আপনি টেবিলে নতুন কোনো রেকর্ড যোগ করেন, তখন ডেটাবেজ সিস্টেমকে দুটি কাজ করতে হয়—
    - মূল টেবিলে ডেটাটি সেভ করা।
    - ইনডেক্স ফাইলে নতুন এন্ট্রিটি সঠিক জায়গায় বসানো এবং পুরো ইনডেক্সটি পুনরায় সাজানো (Re-organize)।

  2. পয়েন্টার আপডেট: কোনো রেকর্ড ডিলিট করলে ইনডেক্স ফাইল থেকেও তার রেফারেন্স বা পয়েন্টার মুছে ফেলতে হয়।

পরীক্ষার টিপস (Exam Tip): যদি প্রশ্ন আসে "ইনডেক্সিং-এর অসুবিধা কী?" বা "ইনডেক্সিং কেন আপডেট অপারেশন স্লো করে?", তবে উত্তর লিখুন: "ইনডেক্সিং-এ প্রতিটি ডেটা ম্যানিপুলেশন (Insert/Update/Delete) অপারেশনের সময় মূল টেবিলের পাশাপাশি ইনডেক্স ফাইলও আপডেট করতে হয়, যা প্রসেসরের বাড়তি সময় ও মেমোরি ব্যবহার করে। তাই ইনডেক্সিং আপডেট অপারেশনকে ধীরগতি করে দেয়।"

সর্টিং এবং ইনডেক্সিং-এর তুলনা

পরীক্ষায় সর্টিং এবং ইনডেক্সিং-এর পার্থক্য লিখতে বলা হয়। নিচে একটি আদর্শ তুলনামূলক ছক দেওয়া হলো:

বৈশিষ্ট্যের ভিত্তি সর্টিং (Sorting) ইনডেক্সিং (Indexing)
মূল উদ্দেশ্য ডেটাকে সুবিন্যস্তভাবে প্রদর্শন (Display) করা। ডেটাকে দ্রুত খুঁজে বের করা (Search) বা কুয়েরি প্রসেস করা।
ফিজিক্যাল অর্ডার সর্টিং-এর ফলে মূল ফাইলের ডেটার ফিজিক্যাল ক্রম পরিবর্তিত হতে পারে (যদি পার্মানেন্ট সর্ট করা হয়)। ইনডেক্সিং মূল ডেটার ফিজিক্যাল ক্রম পরিবর্তন করে না (ক্লাস্টার্ড বাদে), শুধু লজিক্যাল অর্ডার তৈরি করে।
মেমোরি স্পেস সর্টিং-এর জন্য সাধারণত অতিরিক্ত মেমোরি স্পেসের প্রয়োজন হয় না। ইনডেক্স ফাইল সংরক্ষণের জন্য অতিরিক্ত মেমোরি স্পেস বা ডিস্ক স্পেস প্রয়োজন হয়।
অপারেশন এটি ডেটা সাজানোর একটি পদ্ধতি মাত্র। এটি একটি ডেটা স্ট্রাকচার কৌশল (যেমন B-Tree)।
গতি (Speed) সর্টিং নিজেই সার্চিং স্পিড বাড়ায় না (যদি না বাইনারি সার্চ ব্যবহার করা হয়)। ইনডেক্সিং সার্চিং স্পিড উল্লেখযোগ্যভাবে বৃদ্ধি করে।
আপডেট প্রভাব ডেটা আপডেট বা ইনসার্ট করলে সর্টিং অর্ডারে প্রভাব পড়তে পারে, তবে প্রসেসটি সরল। ডেটা আপডেটের সময় ইনডেক্স আপডেট করতে হয় বলে সময় বেশি লাগে।

সংক্ষিপ্ত সারাংশ (Quick Revision)

মনে রাখার মতো পয়েন্ট:
- সর্টিং হলো ডেটা সাজানো (Ascending/Descending)।
- ইনডেক্সিং হলো দ্রুত খোঁজার জন্য সূচিপত্র তৈরি করা।
- ইনডেক্সিং সার্চ বা কুয়েরি ফাস্ট করে, কিন্তু ডেটা এন্ট্রি (Insert/Update) স্লো করে।
- প্রাইমারি কি (Primary Key) ফিল্ডে অটোমেটিক ইনডেক্স তৈরি হয়।
- বাইনারি সার্চ অ্যালগরিদম ব্যবহার করার জন্য ডেটা ইনডেক্সড বা সর্টেড হতে হয়।

পরিভাষা (Glossary)

পরিভাষা (Term) সংজ্ঞা (Definition)
সর্টিং (Sorting) ডেটাবেজের রেকর্ডগুলোকে নির্দিষ্ট ক্রমানুসারে সাজানোর পদ্ধতি।
ইনডেক্সিং (Indexing) ডেটাবেজ থেকে তথ্য দ্রুত খুঁজে বের করার জন্য ব্যবহৃত কৌশল বা ডেটা স্ট্রাকচার।
পয়েন্টার (Pointer) মেমোরি অ্যাড্রেস বা ঠিকানা নির্দেশক ভেরিয়েবল, যা ইনডেক্স ফাইলে ব্যবহৃত হয়।
অ্যাসেন্ডিং (Ascending) ছোট থেকে বড় বা A থেকে Z ক্রমে সাজানো।
ডিসেন্ডিং (Descending) বড় থেকে ছোট বা Z থেকে A ক্রমে সাজানো।
ক্লাস্টার্ড ইনডেক্স যে ইনডেক্সিং ব্যবস্থায় ডেটা ফিজিক্যালি সাজানো থাকে।

অনুশীলনের প্রশ্ন

সৃজনশীল প্রশ্ন

সৃজনশীল প্রশ্ন ১

'মেঘনা কলেজ'-এর দ্বাদশ শ্রেণির ছাত্রছাত্রীদের তথ্যাবলি কম্পিউটারের ডেটাবেজে সংরক্ষণ করা আছে। অধ্যক্ষ মহোদয় যখন কোনো ছাত্রের 'Roll' নম্বর দিয়ে সার্চ দেন, তখন তথ্যটি মুহূর্তের মধ্যে প্রদর্শিত হয়। কিন্তু যখন কোনো ছাত্রের 'Name' দিয়ে সার্চ দেন, তখন কাঙ্ক্ষিত তথ্য আসতে বেশ দেরি হয়। সমস্যাটি সমাধানের জন্য আইসিটি শিক্ষক বললেন, "নামের ফিল্ডে একটি বিশেষ ব্যবস্থা গ্রহণ করলে রোল নম্বরের মতোই দ্রুত তথ্য পাওয়া যাবে।" অপরদিকে কলেজের করণিক বললেন, "পুরো টেবিলটি নামের বর্ণানুক্রমিক সজ্জায় পরিবর্তন করলে ভালো হবে।"

ক) সর্টিং কী?
খ) ডেটাবেজ ইনডেক্সিং কেন গুরুত্বপূর্ণ?
গ) আইসিটি শিক্ষকের নির্দেশিত 'বিশেষ ব্যবস্থা'টি উদ্দীপকের আলোকে ব্যাখ্যা করো।
ঘ) করণিকের প্রস্তাব (সর্টিং) এবং শিক্ষকের পদ্ধতির (ইনডেক্সিং) মধ্যে কোনটি উদ্দীপকের পরিস্থিতিতে বেশি উপযোগী? তুলনামূলক বিশ্লেষণপূর্বক মতামত দাও।

উত্তর

(ক) ডেটাবেজের ডেটা বা রেকর্ডগুলোকে কোনো নির্দিষ্ট ফিল্ডের ভিত্তিতে ঊর্ধ্বক্রম (Ascending) বা অধঃক্রম (Descending) অনুসারে সাজানোর প্রক্রিয়াকে সর্টিং (Sorting) বলে।

(খ) ডেটাবেজ ইনডেক্সিং গুরুত্বপূর্ণ কারণ এটি বিশাল ডেটাবেজ থেকে তথ্য খোঁজার (Searching) গতি বহুগুণ বাড়িয়ে দেয়। ইনডেক্সিং করা থাকলে ডেটাবেজ ইঞ্জিন পুরো টেবিল স্ক্যান না করে শুধুমাত্র ইনডেক্স ফাইল ব্যবহার করে দ্রুত নির্দিষ্ট রেকর্ডটি খুঁজে বের করতে পারে, যা সময় ও সিস্টেম রিসোর্স সাশ্রয় করে।

(গ) উদ্দীপকে আইসিটি শিক্ষক যে 'বিশেষ ব্যবস্থা'র কথা বলেছেন তা হলো ইনডেক্সিং (Indexing)
সাধারণত ডেটাবেজে প্রাইমারি কি (যেমন- Roll) বাই ডিফল্ট ইনডেক্স করা থাকে, তাই রোল দিয়ে সার্চ দিলে দ্রুত ফলাফল পাওয়া যায়। কিন্তু 'Name' ফিল্ডটি ইনডেক্স করা ছিল না, তাই ডেটাবেজ ইঞ্জিনকে প্রতিটি রেকর্ড একে একে খুঁজতে বা সিকুয়েন্সিয়াল সার্চ করতে হচ্ছিল, যা সময়সাপেক্ষ।
আইসিটি শিক্ষকের পরামর্শ অনুযায়ী 'Name' ফিল্ডের ওপর ইনডেক্স তৈরি করলে, ডেটাবেজ নামের একটি সুশৃঙ্খল তালিকা (যেমন- B-Tree বা হ্যাশ টেবিল) তৈরি করবে। ফলে পরবর্তীতে নাম দিয়ে সার্চ করলে ডেটাবেজ সম্পূর্ণ টেবিল না খুঁজে সরাসরি ওই নামের অবস্থানে চলে যাবে এবং দ্রুত তথ্য প্রদর্শন করবে। এটি বইয়ের পেছনের নির্ঘণ্ট বা ইনডেক্সের মতোই কাজ করে।

(ঘ) উদ্দীপকের পরিস্থিতিতে করণিকের প্রস্তাব ছিল সর্টিং এবং শিক্ষকের পদ্ধতি ছিল ইনডেক্সিং। নিচে এ দুটির তুলনামূলক বিশ্লেষণ করা হলো:

  1. করণিকের প্রস্তাব (সর্টিং): পুরো টেবিলটি নামের ক্রমানুসারে সাজালে (Physical Sorting) নাম দিয়ে সার্চ করা সহজ হতে পারে, কিন্তু এতে ডেটাবেজের মূল ফিজিক্যাল অর্ডারে পরিবর্তন আসবে। যদি পরবর্তীতে আবার রোল নম্বর বা অন্য ফিল্ড দিয়ে সার্চ করার প্রয়োজন হয়, তখন আবার সমস্যা দেখা দেবে। তাছাড়া প্রতিবার নতুন ডেটা এন্ট্রি হলে পুনরায় পুরো টেবিল সর্ট করা অত্যন্ত সময়সাপেক্ষ ও অদক্ষ পদ্ধতি।

  2. শিক্ষকের পদ্ধতি (ইনডেক্সিং): ইনডেক্সিং করলে মূল ডেটা টেবিলের ফিজিক্যাল অর্ডারে কোনো পরিবর্তন হয় না। এটি কেবল একটি আলাদা ইনডেক্স ফাইল তৈরি করে যেখানে নাম এবং তার মেমোরি অ্যাড্রেস বা পয়েন্টার থাকে। এর ফলে নাম দিয়ে সার্চ করা অত্যন্ত দ্রুত হয়, আবার রোলের ইনডেক্সও অক্ষুণ্ণ থাকে। অর্থাৎ একাধিক ফিল্ডের ওপর ইনডেক্স থাকলে যেকোনো ফিল্ড দিয়েই দ্রুত সার্চ করা সম্ভব।

সিদ্ধান্ত: সর্টিং পদ্ধতিতে বারবার ডেটা সাজানো জটিল এবং এক ফিল্ডের ভিত্তিতে সাজালে অন্য ফিল্ডের ক্রম নষ্ট হয়। অন্যদিকে, ইনডেক্সিং মূল ডেটা ঠিক রেখে সার্চের গতি বাড়ায় এবং একাধিক ফিল্ডে প্রয়োগ করা যায়। তাই করণিকের প্রস্তাবের চেয়ে আইসিটি শিক্ষকের পরামর্শ (ইনডেক্সিং) গ্রহণ করা অধিকতর যুক্তিযুক্ত ও সুবিধাজনক।


সৃজনশীল প্রশ্ন ২

একটি মাল্টিন্যাশনাল কোম্পানির 'Employee' টেবিলে লক্ষাধিক কর্মীর তথ্য সংরক্ষিত আছে। ডেটাবেজ অ্যাডমিনিস্ট্রেটর জনাব রাকিব লক্ষ্য করলেন যে, নতুন কর্মী নিয়োগের পর তাদের তথ্য এন্ট্রি (Insert) করতে আগের চেয়ে অনেক বেশি সময় লাগছে এবং সার্ভার ব্যস্ত থাকছে। অথচ আগে সার্চ বা কুয়েরি করতে কোনো সময় লাগত না। তিনি অনুসন্ধান করে দেখলেন, সার্চ ফাস্ট করার জন্য তিনি টেবিলের প্রায় সব ফিল্ডেই (নাম, ইমেইল, ফোন নম্বর, জয়েনিং ডেট) ইনডেক্স তৈরি করে রেখেছিলেন। তিনি বুঝতে পারলেন, অতিরিক্ত ইনডেক্সিং-এর কারণেই নতুন ডেটা এন্ট্রিতে এই ধীরগতি সৃষ্টি হয়েছে।

ক) কুয়েরি কী?
খ) ইনডেক্স ফাইল আপডেট করা সময়সাপেক্ষ কেন?
গ) উদ্দীপকে ডেটা এন্ট্রিতে ধীরগতি বা সমস্যার কারণটি ব্যাখ্যা করো।
ঘ) "দ্রুত সার্চের জন্য ইনডেক্সিং অপরিহার্য হলেও এর যথেচ্ছ ব্যবহার সিস্টেমের দক্ষতাকে কমিয়ে দেয়"—উদ্দীপকের আলোকে উক্তিটি মূল্যায়ন করো।

উত্তর

(ক) ডেটাবেজে সংরক্ষিত বিপুল পরিমাণ তথ্যের মধ্য থেকে নির্দিষ্ট কোনো শর্ত সাপেক্ষে প্রয়োজনীয় তথ্য খুঁজে বের করা বা প্রদর্শন করার প্রক্রিয়াকে কুয়েরি (Query) বলে।

(খ) ইনডেক্স করা কোনো টেবিলে নতুন ডেটা যোগ বা পরিবর্তন করলে, মূল টেবিলের পাশাপাশি ইনডেক্স ফাইলেও সেই পরিবর্তন আপডেট করতে হয়। ইনডেক্স ফাইলে ডেটাগুলো একটি নির্দিষ্ট কাঠামোতে (যেমন B-Tree) সাজানো থাকে। তাই একটি রেকর্ড আপডেট বা ডিলিট করলে ইনডেক্স ট্রি-এর কাঠামো পুনর্গঠন (Rebalance) করতে হয়, যা প্রসেসরের জন্য একটি সময়সাপেক্ষ কাজ।

(গ) উদ্দীপকে জনাব রাকিবের ডেটাবেজে ডেটা এন্ট্রিতে ধীরগতির মূল কারণ হলো অতিরিক্ত ইনডেক্সিং (Over-indexing)
যখন কোনো টেবিলে নতুন রেকর্ড ইনসার্ট (Insert) করা হয়, তখন ডেটাবেজ ইঞ্জিনকে শুধু মূল টেবিলেই ডেটা রাখতে হয় না, বরং ওই টেবিলের সাথে যুক্ত প্রতিটি ইনডেক্স ফাইলও আপডেট করতে হয়। উদ্দীপকে বলা হয়েছে জনাব রাকিব প্রায় সব ফিল্ডেই ইনডেক্স তৈরি করেছেন। ফলে একজন নতুন কর্মীর তথ্য এন্ট্রি করার সময় সিস্টেমকে প্রতিটি ফিল্ডের (নাম, ইমেইল, ফোন ইত্যাদি) জন্য আলাদা আলাদা ইনডেক্স ফাইল আপডেট করতে হচ্ছে। একটি ইনসার্ট কমান্ডের বিপরীতে অনেকগুলো রাইট অপারেশন (Write Operation) চলায় সিস্টেমের লোড বেড়ে গেছে এবং ডেটা এন্ট্রি ধীরগতির হয়ে পড়েছে।

(ঘ) উদ্দীপকে উল্লিখিত উক্তিটি—"দ্রুত সার্চের জন্য ইনডেক্সিং অপরিহার্য হলেও এর যথেচ্ছ ব্যবহার সিস্টেমের দক্ষতাকে কমিয়ে দেয়"—যথার্থ এবং প্রযুক্তিগতভাবে সত্য। নিচে এর মূল্যায়ন করা হলো:

ইনডেক্সিংয়ের প্রয়োজনীয়তা:
ইনডেক্সিং হলো ডেটাবেজ পারফরম্যান্স অপ্টিমাইজেশনের অন্যতম প্রধান হাতিয়ার। লক্ষ লক্ষ রেকর্ডের মধ্যে কোনো নির্দিষ্ট তথ্য খুঁজে বের করতে ইনডেক্সিং ছাড়া অন্য কোনো বিকল্প নেই। এটি 'Full Table Scan' এর পরিবর্তে 'Index Seek' ব্যবহার করে মিলিসেকেন্ডে ফলাফল এনে দিতে পারে। তাই রিড-ইনটেনসিভ (Read-intensive) অপারেশনের জন্য এটি অপরিহার্য।

যথেচ্ছ ব্যবহারের কুফল:
কিন্তু উদ্দীপকের জনাব রাকিবের মতো সব ফিল্ডে ইনডেক্স করলে নিম্নলিখিত সমস্যাগুলো হয়:
১. DML অপারেশন ধীরগতি: ইনসার্ট, আপডেট বা ডিলিট কমান্ড দিলে প্রতিটি ইনডেক্স আপডেট করতে হয়, যা সিস্টেমকে ধীর করে দেয়।
২. স্টোরেজ অপচয়: ইনডেক্স ফাইলগুলো ডিস্কে অতিরিক্ত জায়গা দখল করে। অনেক সময় মূল ডেটার চেয়ে ইনডেক্সের আকার বড় হয়ে যেতে পারে।
৩. মেইনটেনেন্স জটিলতা: ডেটাবেজ মেইনটেনেন্স এবং ব্যাকআপ নেওয়ার সময়ও বেড়ে যায়।

উপসংহার:
ইনডেক্সিং একটি 'Trade-off'। এটি ডেটা পড়ার (Read) গতি বাড়ায় কিন্তু ডেটা লেখার (Write) গতি কমিয়ে দেয়। তাই সব ফিল্ডে ইনডেক্স না করে শুধুমাত্র যে ফিল্ডগুলো দিয়ে সচরাচর সার্চ বা জয়েন (Join) করা হয়, কেবল সেগুলোতে ইনডেক্স করা উচিত। উদ্দীপকের পরিস্থিতি প্রমাণ করে যে, অপ্রয়োজনীয় বা অতিরিক্ত ইনডেক্সিং সিস্টেমের সামগ্রিক দক্ষতা কমিয়ে দেয়।


সৃজনশীল প্রশ্ন ৩

নিচের টেবিলটি লক্ষ্য করো:

Table: Student_Info

ID Name GPA District
101 Rakib 5.00 Dhaka
105 Amin 4.50 Comilla
102 Belal 3.80 Dhaka
104 Jamal 5.00 Sylhet

টেবিলটিতে নতুন রেকর্ড যুক্ত হওয়ার সাথে সাথে আইডির ক্রম ঠিক থাকে না। একজন ব্যবহারকারী চাইলেন টেবিলের ডেটাগুলোকে 'District' এর ভিত্তিতে এবং একই জেলার ক্ষেত্রে 'GPA' এর ভিত্তিতে বড় থেকে ছোট ক্রমে দেখতে।

ক) মাল্টিলেভেল সর্টিং কী?
খ) সর্টিং ও ইনডেক্সিং-এর মধ্যে দুটি মূল পার্থক্য লেখো।
গ) উদ্দীপকের টেবিলটি 'District' (Ascending) এবং 'GPA' (Descending) অনুসারে সর্ট করলে কেমন দেখাবে? তা তৈরি করে দেখাও।
ঘ) "শুধুমাত্র সর্টিং ব্যবহার করে বড় ডেটাবেজ ম্যানেজ করা সম্ভব নয়, ইনডেক্সিং প্রয়োজন"—উক্তিটির যৌক্তিকতা বিশ্লেষণ করো।

উত্তর

(ক) ডেটাবেজ টেবিলের একাধিক ফিল্ড বা কলামের ওপর ভিত্তি করে ডেটা সাজানোর প্রক্রিয়াকে মাল্টিলেভেল সর্টিং (Multi-level Sorting) বলে। এতে প্রথম ফিল্ডের ডেটা একই হলে দ্বিতীয় ফিল্ডের ভিত্তিতে ক্রম নির্ধারণ করা হয়।

(খ) সর্টিং ও ইনডেক্সিং-এর দুটি মূল পার্থক্য:
১. সর্টিং টেবিলের ডেটাগুলোকে ফিজিক্যালি বা ভিউয়ালি পুনর্বিন্যাস করে, কিন্তু ইনডেক্সিং মূল ডেটার ক্রম পরিবর্তন না করে আলাদা একটি পয়েন্টার ফাইল তৈরি করে।
২. সর্টিং সাধারণত আউটপুট সাজিয়ে দেখার জন্য ব্যবহৃত হয়, আর ইনডেক্সিং মূলত দ্রুত ডেটা খোঁজার (Searching) জন্য ব্যবহৃত হয়।

(গ) উদ্দীপকের টেবিলটি প্রথমে 'District' অনুযায়ী Ascending (A-Z) এবং পরে 'GPA' অনুযায়ী Descending (বড় থেকে ছোট) অর্ডারে সর্ট করলে নিম্নরূপ হবে:

Sorted Table:

ID Name GPA District
105 Amin 4.50 Comilla
101 Rakib 5.00 Dhaka
102 Belal 3.80 Dhaka
104 Jamal 5.00 Sylhet

(ব্যাখ্যা: Comilla 'C' দিয়ে শুরু তাই প্রথমে। এরপর Dhaka 'D'। ঢাকার দুজন ছাত্র (Rakib, Belal)। এদের মধ্যে Rakib-এর জিপিএ (5.00) Belal-এর (3.80) চেয়ে বেশি, তাই জিপিএ ডিসেন্ডিং শর্তানুসারে Rakib আগে বসেছে। শেষে Sylhet।)

(ঘ) উক্তিটি—"শুধুমাত্র সর্টিং ব্যবহার করে বড় ডেটাবেজ ম্যানেজ করা সম্ভব নয়, ইনডেক্সিং প্রয়োজন"—সম্পূর্ণ যৌক্তিক।

বিশ্লেষণ:
১. সময়ের অপচয়: সর্টিং একটি সাময়িক প্রক্রিয়া। যখনই আমরা কোনো নির্দিষ্ট অর্ডারে ডেটা দেখতে চাই, তখনই প্রসেসরকে পুরো টেবিল সাজাতে হয়। ডেটাবেজে যদি লক্ষ লক্ষ রেকর্ড থাকে, তবে প্রতিবার কুয়েরির সময় সর্ট করা অসম্ভব ধীরগতির হবে। ইনডেক্সিং একবার করে রাখলে, পরবর্তী সব সার্চ তাৎক্ষণিক হয়।
২. মেমোরি ব্যবহার: সর্টিং অপারেশনের জন্য প্রচুর অস্থায়ী মেমোরি (RAM) প্রয়োজন হয়। বড় ডেটাবেজ সর্ট করতে গিয়ে সিস্টেম ক্র্যাশ করতে পারে।
৩. মাল্টি-ইউজার এক্সেস: একই টেবিলে একাধিক ইউজার ভিন্ন ভিন্ন ফিল্ড দিয়ে সার্চ করতে পারেন। মূল টেবিলটি একই সময়ে একাধিক অর্ডারে সর্ট করে রাখা সম্ভব নয় (যেমন- একজন নামের ক্রমানুসারে এবং অন্যজন আইডির ক্রমানুসারে চাইলেন)। কিন্তু ইনডেক্সিং ব্যবহার করে একই টেবিলের ওপর একাধিক ইনডেক্স (Name Index, ID Index) তৈরি করে রাখা যায়, যা সবার প্রয়োজন মেটায়।

সুতরাং, ছোট ডেটাবেজের জন্য সর্টিং কাজ চালিয়ে নিলেও, প্রফেশনাল বা বড় ডেটাবেজ ম্যানেজমেন্টের জন্য ইনডেক্সিং অপরিহার্য।

এমসিকিউ

১। ডেটাবেজ টেবিলের ডেটাকে নির্দিষ্ট ক্রমানুসারে সাজানোকে কী বলে?

ক) ইনডেক্সিং
খ) সর্টিং
গ) সার্চিং
ঘ) ফিল্টারিং

সঠিক উত্তর: খ) সর্টিং

ব্যাখ্যা: ডেটাবেজের রেকর্ডগুলোকে কোনো নির্দিষ্ট ফিল্ডের (যেমন- নাম বা রোল) ভিত্তিতে ছোট থেকে বড় (Ascending) বা বড় থেকে ছোট (Descending) সাজানোর প্রক্রিয়াকে সর্টিং বলে।


২। SQL-এ ডেটা সর্ট করার জন্য কোন কমান্ডটি ব্যবহৃত হয়?

ক) SORT BY
খ) ORDER BY
গ) GROUP BY
ঘ) ARRANGE BY

সঠিক উত্তর: খ) ORDER BY

ব্যাখ্যা: SQL বা Structured Query Language-এ ডেটা সাজানোর জন্য ORDER BY ক্লজটি ব্যবহার করা হয়।


৩। ORDER BY ক্লজে কোনো কিছু উল্লেখ না করলে ডিফল্ট হিসেবে কোন অর্ডারে ডেটা সর্ট হয়?

ক) Descending
খ) Ascending
গ) Random
ঘ) None

সঠিক উত্তর: খ) Ascending

ব্যাখ্যা: ORDER BY ক্লজে ASC বা DESC উল্লেখ না করলে ডেটাবেজ স্বয়ংক্রিয়ভাবে ছোট থেকে বড় বা Ascending অর্ডারে ডেটা সাজিয়ে প্রদর্শন করে।


৪। ডেটাবেজ ইনডেক্সিং (Indexing) ব্যবহারের মূল উদ্দেশ্য কী?

ক) ডেটা এন্ট্রি দ্রুত করা
খ) ডেটা নিরাপত্তা প্রদান করা
গ) দ্রুত ডেটা খুঁজে বের করা
ঘ) ডেটা ডিলিট করা

সঠিক উত্তর: গ) দ্রুত ডেটা খুঁজে বের করা

ব্যাখ্যা: ইনডেক্সিং-এর মূল কাজ হলো ডেটাবেজ থেকে নির্দিষ্ট ডেটা খোঁজার বা সার্চ করার গতি (Search Performance) বৃদ্ধি করা। এটি বইয়ের নির্ঘণ্টের মতো কাজ করে।


৫। ইনডেক্সিং করার ফলে ডেটাবেজের কোন অপারেশনের গতি কমে যেতে পারে?

ক) SELECT
খ) UPDATE
গ) READ
ঘ) VIEW

সঠিক উত্তর: খ) UPDATE

ব্যাখ্যা: ইনডেক্স করা টেবিলে কোনো ডেটা আপডেট, ইনসার্ট বা ডিলিট করলে ইনডেক্স ফাইলটিও আপডেট করতে হয়, যা সময়সাপেক্ষ। তাই ডেটা ম্যানিপুলেশন (DML) অপারেশন কিছুটা ধীরগতির হয়।


৬। কোন ফিল্ডের ওপর ভিত্তি করে সাধারণত স্বয়ংক্রিয়ভাবে ইনডেক্স তৈরি হয়?

ক) Foreign Key
খ) Primary Key
গ) Name Field
ঘ) Date Field

সঠিক উত্তর: খ) Primary Key

ব্যাখ্যা: অধিকাংশ ডেটাবেজ সিস্টেমে যখন কোনো ফিল্ডকে প্রাইমারি কি (Primary Key) হিসেবে ঘোষণা করা হয়, তখন স্বয়ংক্রিয়ভাবে তার ওপর একটি ক্লাস্টারড ইনডেক্স (Clustered Index) তৈরি হয়ে যায়।


৭। বড় থেকে ছোট (Descending) অর্ডারে ডেটা সাজানোর জন্য SQL কমান্ডে কী লিখতে হয়?

ক) ASC
খ) DESC
গ) DOWN
ঘ) SMALL

সঠিক উত্তর: খ) DESC

ব্যাখ্যা: বড় থেকে ছোট বা অধঃক্রম অর্ডারে সাজাতে ORDER BY ক্লজের সাথে DESC কিওয়ার্ড ব্যবহার করতে হয়। যেমন: ORDER BY Salary DESC


৮। ইনডেক্স ফাইলে ডেটাগুলো সাধারণত কোন স্ট্রাকচারে সংরক্ষিত থাকে?

ক) Stack
খ) Queue
গ) B-Tree
ঘ) Linked List

সঠিক উত্তর: গ) B-Tree

ব্যাখ্যা: রিলেশনাল ডেটাবেজ সিস্টেমে ইনডেক্সিং-এর জন্য সবচেয়ে জনপ্রিয় এবং বহুল ব্যবহৃত ডেটা স্ট্রাকচার হলো 'B-Tree' (Balanced Tree)।


৯। কোন ধরনের ফিল্ডের জন্য 'Bitmap Index' সবচেয়ে বেশি উপযোগী?

ক) যেখানে ডেটার ভ্যারিয়েশন খুব বেশি (যেমন- নাম)
খ) যেখানে ডেটার ভ্যারিয়েশন খুব কম (যেমন- জেন্ডার: Male/Female)
গ) যেখানে সংখ্যার মান অনেক বড়
ঘ) টেক্সট ফিল্ডের জন্য

সঠিক উত্তর: খ) যেখানে ডেটার ভ্যারিয়েশন খুব কম (যেমন- জেন্ডার: Male/Female)

ব্যাখ্যা: যে কলামে স্বতন্ত্র মানের সংখ্যা কম (Low Cardinality), যেমন- Gender (M/F) বা Marital Status (Yes/No), সেখানে বিটম্যাপ ইনডেক্স খুব কার্যকর।


১০। নিচের কোনটি সর্টিং এবং ইনডেক্সিং-এর মধ্যে একটি পার্থক্য?

ক) সর্টিং ফিজিক্যাল অর্ডার পরিবর্তন করে, ইনডেক্সিং করে না
খ) ইনডেক্সিং ফিজিক্যাল অর্ডার পরিবর্তন করে, সর্টিং করে না
গ) সর্টিং-এ স্টোরেজ বেশি লাগে
ঘ) ইনডেক্সিং-এ সার্চ স্লো হয়

সঠিক উত্তর: ক) সর্টিং ফিজিক্যাল অর্ডার পরিবর্তন করে, ইনডেক্সিং করে না

ব্যাখ্যা: সর্টিং টেবিলের ডেটাগুলোকে পুনরায় সাজিয়ে ফিজিক্যাল লোকেশন পরিবর্তন করতে পারে, কিন্তু ইনডেক্সিং মূল টেবিলের ডেটা ঠিক রেখে আলাদা একটি পয়েন্টার ফাইল তৈরি করে লজিক্যাল অর্ডার মেইনটেইন করে।


১১। মাল্টিলেভেল সর্টিং (Multi-level Sorting) বলতে কী বোঝায়?

ক) একাধিক টেবিলে সর্ট করা
খ) একাধিক ফিল্ডের ভিত্তিতে সর্ট করা
গ) একাধিক ডেটাবেজে সর্ট করা
ঘ) একবার সর্ট করার পর আবার সর্ট করা

সঠিক উত্তর: খ) একাধিক ফিল্ডের ভিত্তিতে সর্ট করা

ব্যাখ্যা: যখন একটি ফিল্ডের ডেটা একই হলে অন্য একটি ফিল্ডের ভিত্তিতে ক্রম নির্ধারণ করা হয়, তখন তাকে মাল্টিলেভেল সর্টিং বলে। যেমন: ORDER BY District ASC, GPA DESC


১২। SQL কমান্ড SELECT Name FROM Students ORDER BY Roll ASC এর কাজ কী?

ক) নামগুলো বর্ণানুক্রমিক সাজাবে
খ) রোল নম্বর অনুযায়ী নামগুলো দেখাবে
গ) রোল নম্বর বড় থেকে ছোট সাজাবে
ঘ) শুধু রোল নম্বর দেখাবে

সঠিক উত্তর: খ) রোল নম্বর অনুযায়ী নামগুলো দেখাবে

ব্যাখ্যা: কুয়েরিটিতে ORDER BY Roll ASC বলা হয়েছে, তাই রোল নম্বরের ছোট থেকে বড় ক্রমানুসারে ছাত্রছাত্রীদের নাম প্রদর্শিত হবে।


১৩। একটি টেবিলে সর্বোচ্চ কয়টি 'Clustered Index' থাকতে পারে?

ক) ১টি
খ) ২টি
গ) ৩টি
ঘ) অসংখ্য

সঠিক উত্তর: ক) ১টি

ব্যাখ্যা: ক্লাস্টারড ইনডেক্স ডেটাবেজের ডেটাগুলোকে ফিজিক্যালি সাজিয়ে রাখে। যেহেতু ডেটা ফিজিক্যালি একভাবেই সাজানো সম্ভব, তাই একটি টেবিলে মাত্র একটিই ক্লাস্টারড ইনডেক্স থাকতে পারে।


১৪। ইনডেক্সিং করার অসুবিধা কোনটি?

ক) ডেটা খুঁজে পাওয়া কঠিন
খ) অতিরিক্ত মেমোরি বা স্টোরেজ প্রয়োজন হয়
গ) কুয়েরি প্রসেসিং ধীর হয়
ঘ) ডেটা ডুপ্লিকেট হয়

সঠিক উত্তর: খ) অতিরিক্ত মেমোরি বা স্টোরেজ প্রয়োজন হয়

ব্যাখ্যা: ইনডেক্স তৈরির ফলে মূল ডেটা টেবিলের পাশাপাশি ইনডেক্স ফাইলটি সংরক্ষণের জন্য ডিস্কে অতিরিক্ত জায়গার প্রয়োজন হয়।


১৫। CREATE INDEX কমান্ডটি কোন ভাষায় লেখা হয়?

ক) C++
খ) Java
গ) SQL
ঘ) Python

সঠিক উত্তর: গ) SQL

ব্যাখ্যা: ডেটাবেজ ম্যানেজমেন্ট সিস্টেমে ইনডেক্স তৈরির জন্য SQL (Structured Query Language) এর CREATE INDEX কমান্ড ব্যবহার করা হয়।


১৬। সর্টিং-এর ক্রম হতে পারে—
i. আরোহী (Ascending)
ii. অবরোহী (Descending)
iii. দৈবচয়ন (Random)

নিচের কোনটি সঠিক?

ক) i ও ii
খ) i ও iii
গ) ii ও iii
ঘ) i, ii ও iii

সঠিক উত্তর: ক) i ও ii

ব্যাখ্যা: সর্টিং শুধুমাত্র নির্দিষ্ট কোনো ক্রমে (ছোট থেকে বড় বা বড় থেকে ছোট) করা যায়। র‍্যান্ডম বা দৈবচয়ন কোনো সর্টিং পদ্ধতি নয়।


১৭। ইনডেক্সিং ব্যবহার করা উচিত যখন—
i. টেবিলে প্রচুর রেকর্ড থাকে
ii. কোনো ফিল্ড দিয়ে প্রায়ই সার্চ করা হয়
iii. টেবিলে খুব কম ডেটা থাকে

নিচের কোনটি সঠিক?

ক) i ও ii
খ) i ও iii
গ) ii ও iii
ঘ) i, ii ও iii

সঠিক উত্তর: ক) i ও ii

ব্যাখ্যা: ছোট টেবিলে ইনডেক্সিং খুব একটা সুবিধা দেয় না। কিন্তু বিশাল টেবিলে এবং যে কলাম দিয়ে ফ্রিকুয়েন্টলি সার্চ বা জয়েন করা হয়, সেখানে ইনডেক্সিং অত্যন্ত কার্যকর।


১৮। ডেটাবেজ ইনডেক্সিং-এর ক্ষেত্রে প্রযোজ্য—
i. বাইনারি সার্চ অ্যালগরিদম ব্যবহার করে
ii. ডেটা এন্ট্রির গতি কমিয়ে দেয়
iii. মেমোরি স্পেস সাশ্রয় করে

নিচের কোনটি সঠিক?

ক) i ও ii
খ) i ও iii
গ) ii ও iii
ঘ) i, ii ও iii

সঠিক উত্তর: ক) i ও ii

ব্যাখ্যা: ইনডেক্সিং সাধারণত বি-ট্রি বা বাইনারি সার্চ লজিক ব্যবহার করে দ্রুত খোঁজে। এটি ডেটা এন্ট্রির (Insert) গতি কমায়। তবে এটি মেমোরি স্পেস সাশ্রয় করে না, বরং অতিরিক্ত স্পেস ব্যবহার করে।


১৯। SQL-এ ORDER BY ক্লজ ব্যবহার করা যায়—
i. টেক্সট ডেটার ক্ষেত্রে
ii. নিউমারিক ডেটার ক্ষেত্রে
iii. তারিখ বা ডেট ডেটার ক্ষেত্রে

নিচের কোনটি সঠিক?

ক) i ও ii
খ) i ও iii
গ) ii ও iii
ঘ) i, ii ও iii

সঠিক উত্তর: ঘ) i, ii ও iii

ব্যাখ্যা: যেকোনো ধরনের সর্টেবল ডেটা টাইপ (সংখ্যা, অক্ষর, তারিখ) এর ওপরই ORDER BY প্রয়োগ করা যায়।


২০। সর্টিং ও ইনডেক্সিং উভয়েরই সাধারণ উদ্দেশ্য হলো—
i. ডেটা সুশৃঙ্খলভাবে উপস্থাপন করা
ii. ডেটা খুঁজে বের করার সময় কমানো
iii. ডেটাবেজের নিরাপত্তা বাড়ানো

নিচের কোনটি সঠিক?

ক) i ও ii
খ) i ও iii
গ) ii ও iii
ঘ) i, ii ও iii

সঠিক উত্তর: ক) i ও ii

ব্যাখ্যা: সর্টিং ডেটা সাজিয়ে উপস্থাপন করে এবং ইনডেক্সিং সার্চ ফাস্ট করে। তবে এদের সাথে ডেটাবেজ সিকিউরিটি বা নিরাপত্তার সরাসরি কোনো সম্পর্ক নেই।


নিচের অনুচ্ছেদটি পড়ে ২১ ও ২২ নম্বর প্রশ্নের উত্তর দাও:
'মেঘনা ব্যাংক'-এর কাস্টমার টেবিলে ১০ লক্ষ গ্রাহকের তথ্য আছে। ম্যানেজার দেখলেন অ্যাকাউন্ট নম্বর দিয়ে সার্চ দিলে দ্রুত তথ্য আসে কিন্তু মোবাইল নম্বর দিয়ে সার্চ দিলে অনেক সময় লাগে। আইসিটি অফিসার পরামর্শ দিলেন মোবাইল নম্বর ফিল্ডে একটি বিশেষ ব্যবস্থা নিতে।

২১। আইসিটি অফিসারের পরামর্শকৃত ব্যবস্থাটি কী?

ক) সর্টিং (Sorting)
খ) ইনডেক্সিং (Indexing)
গ) রিলেশন (Relation)
ঘ) নরমালাইজেশন (Normalization)

সঠিক উত্তর: খ) ইনডেক্সিং (Indexing)

ব্যাখ্যা: কোনো নির্দিষ্ট ফিল্ড (এখানে মোবাইল নম্বর) দিয়ে সার্চ ফাস্ট করার জন্য ওই ফিল্ডের ওপর ইনডেক্স তৈরি করাই হলো সর্বোত্তম সমাধান।


২২। ব্যবস্থাটি গ্রহণ করলে ব্যাংকের কী সুবিধা হবে?

ক) নতুন গ্রাহক এন্ট্রি দ্রুত হবে
খ) মোবাইল নম্বর দিয়ে তথ্য খোঁজা দ্রুত হবে
গ) ডেটাবেজের আকার কমে যাবে
ঘ) ডেটা ডুপ্লিকেট হবে না

সঠিক উত্তর: খ) মোবাইল নম্বর দিয়ে তথ্য খোঁজা দ্রুত হবে

ব্যাখ্যা: মোবাইল নম্বর ফিল্ডে ইনডেক্স করা হলে ডেটাবেজ ইঞ্জিন পুরো টেবিল না খুঁজে সরাসরি ইনডেক্স ব্যবহার করে মোবাইল নম্বরটি খুঁজে পাবে, ফলে সার্চ টাইম অনেক কমে যাবে।


নিচের ডেটা টেবিলটি লক্ষ্য করো এবং ২৩-২৫ নম্বর প্রশ্নের উত্তর দাও:

ID Name Salary Join_Date
101 Abul 20000 2020-01-01
102 Babul 25000 2019-05-10
103 Kabul 20000 2021-03-15

২৩। SELECT * FROM Table ORDER BY Salary ASC কুয়েরি চালালে প্রথমে কার নাম আসবে?

ক) Abul
খ) Babul
গ) Kabul
ঘ) Abul অথবা Kabul

সঠিক উত্তর: ঘ) Abul অথবা Kabul

ব্যাখ্যা: এখানে Abul এবং Kabul উভয়ের বেতন ২০,০০০ (সবচেয়ে কম)। ASC মানে ছোট থেকে বড়। যেহেতু দুজনের বেতন সমান এবং অন্য কোনো শর্ত দেওয়া হয়নি, তাই ডেটাবেজ ইঞ্জিন এ দুটির মধ্যে যেকোনো একটি আগে দেখাতে পারে (সাধারণত ফিজিক্যাল অর্ডারে যে আগে আছে)।


২৪। যদি কুয়েরিটি ORDER BY Salary ASC, Name DESC হয়, তবে ক্রমটি কেমন হবে?

ক) Abul, Kabul, Babul
খ) Kabul, Abul, Babul
গ) Babul, Abul, Kabul
ঘ) Kabul, Babul, Abul

সঠিক উত্তর: খ) Kabul, Abul, Babul

ব্যাখ্যা: প্রথমে বেতন অনুযায়ী ছোট থেকে বড় সাজাবে। ২০০০০ এর দুজন (Abul, Kabul)। এদের মধ্যে আবার নামের উল্টো ক্রম (Z-A) বা DESC হবে। K (Kabul) আগে আসবে, A (Abul) পরে যাবে। শেষে ২৫০০০ বেতনের Babul আসবে। তাই সঠিক ক্রম: Kabul -> Abul -> Babul।


২৫। Join_Date এর ওপর ভিত্তি করে সবচেয়ে পুরোনো কর্মীকে প্রথমে দেখতে চাইলে কুয়েরি কী হবে?

ক) ORDER BY Join_Date DESC
খ) ORDER BY Join_Date ASC
গ) SORT BY Join_Date
ঘ) ARRANGE Join_Date

সঠিক উত্তর: খ) ORDER BY Join_Date ASC

ব্যাখ্যা: তারিখের ক্ষেত্রে ASC (Ascending) মানে হলো পুরোনো তারিখ থেকে নতুন তারিখ। সবচেয়ে পুরোনো কর্মী মানে যার জয়েনিং ডেট সবচেয়ে আগের (ছোট)। তাই ASC ব্যবহার করতে হবে। DESC দিলে সবচেয়ে নতুন কর্মীকে আগে দেখাত।