ডেটাবেজ সর্টিং
এক বা একাধিক ফিল্ড এর মানের উপর ভিত্তি করে ডেটাবেজের রেকর্ডগুলোকে উর্ধ্বক্রম বা নিম্নক্রমে সাজানোর প্রক্রিয়া হচ্ছে সর্টিং। একটি ডেটা টেবিল সর্টিং করার ফলে নতুন একটি টেবিল তৈরি হয় যেখানে টেবিলের রেকর্ডগুলো সর্টিং করা থাকে। একটি টেবিল সর্টিং করার পর টেবিলে নতুন কোন ডেটা ইনপুট দিলে সর্টেড টেবিলটির কোন পরিবর্তন হয় না। এই ক্ষেত্রে পুনরায় সর্টিং করতে হয়। এছাড়া কোন টেবিলের ডেটা সর্টিং করলে যেহেতু টেবিলের নতুন একটি কপি তৈরি হয় তাই অতিরিক্ত মেমোরির প্রয়োজন হয়। বাস্তবক্ষেত্রে সর্টিং এর চেয়ে ইনডেক্সিং বেশি ব্যবহৃত হয়।
সর্টিং দু-প্রকার হয়ে থাকে-
১। উচ্চক্রম/উর্ধ্বক্রম/Ascending order
২। নিম্নক্রম/অবরোহী/Descending order
নিচে টেবিলের রেকর্ডগুলো GPA ফিল্ডের এর ভিত্তিতে নিম্নক্রমে সর্টিং করা হয়েছে-

ডেটাবেজ সর্টিং এর উদ্দেশ্য
ডেটাবেজ সর্টিং এর উদ্দেশ্য হলো কোন ডেটাবেজ টেবিল থেকে কুয়েরির মাধ্যমে প্রাপ্ত আউটপুট ডেটাকে সাজিয়ে উপস্থাপন করা।
সর্টিং এর সাধারণ সিন্ট্যক্স
SELECT column1, column2
FROM table_name
ORDER BY column_name ASC|DESC;
✔ ASC = Ascending (ছোট → বড়)
✔ DESC = Descending (বড় → ছোট
ধরি আমাদের একটি টেবিল আছে students -
আমরা নাম অনুযায়ী সাজাতে চাই -
SELECT * FROM students
ORDER BY name ASC;
👉 ফলাফল A → Z অনুযায়ী আসবে।
ইনডেক্সিং
ইনডেক্সিং হচ্ছে সুসজ্জিতভাবে বা সুবিন্যস্তভাবে তথ্যাবলির সূচি প্রণয়ন করা। ডেটাবেজ থেকে ব্যবহারকারি কোনো ডেটা যাতে দ্রুত খুঁজে বের করতে পারে সেজন্য ডেটাকে একটি বিশেষ অর্ডারে সাজিয়ে ডেটাগুলোর একটা সূচি প্রণয়ন করা হয়। ডেটাবেজ টেবিলের রেকর্ড সমূহকে এরূপ কোনো লজিক্যাল অর্ডারে সাজিয়ে রাখাকেই ইনডেক্স বলে। ডেটাবেজ টেবিলের এক বা একাধিক ফিল্ডের উপর ইনডেক্স করে Alphabetically বা Numerically সাজানো যায়। ইনডেক্স ফাইল মূল ডেটাবেজ ফাইলের কোনরূপ পরিবর্তন না করে বিভিন্নভাবে সাজাতে পারে।
যেমনঃ নিচের Fact টেবিল থেকে যদি ২ রোল ধারীর GPA জানতে চাওয়া হয়। তাহলে কিন্তু একটু বেশি টাইম লাগবে। কারণ রোল ফিল্ডের মান গুলো সাজানো নেই। কিন্তু Fact টেবিলের ইনডেক্স থেকে ২ রোল ধারীর GPA খুব সহজেই পাওয়া যায়। কারণ রোল ফিল্ডের মান গুলো সাজানো আছে।

ইনডেক্স করার সময় বিবেচ্য বিষয় সমূহ
১। সাধারণত কী ফিল্ডের উপর ইনডেক্স করতে হয় এবং ইনডেক্স এর একটি নাম দিতে হয়।
২। যে ফিল্ডের উপর ভিত্তি করে ইনডেক্স করা হয় সেই নামের অনুরূপ নাম নির্বাচন করতে হয়। এতে ইনডেক্স সমূহ মনে রাখতে সুবিধা হয়।
৩। এক বা একাধিক ফিল্ডের উপর ভিত্তি করে ইনডেক্স করা যায়। কোনো ডেটা টেবিলে এক বা একাধিক ইনডেক্স থাকতে পারে বা একই সময়ে খোলা থাকতে পারে। কিন্তু একই সময়ে কেবল একটি ইনডেক্স সক্রিয় থাকবে এবং রেকর্ডসমূহ প্রদর্শনের অর্ডার নিয়ন্ত্রণ করবে।
ইনডেক্সিং এর সুবিধা সমুহ
১। ইনডেক্সিং এর বড় সুবিধা হলো ইনডেক্স তৈরি করার ফলে ফাইলে সহজে ডেটা খুঁজে বের করা যায়।
২। ইনডেক্স তৈরি করার ফলে ডেটাবেজ টেবিলে নতুন কোনো রেকর্ড ইনপুট করা হলেও ইনডেক্স ফাইলগুলো স্বয়ংক্রিয়ভাবে আপডেট হয়ে যায়।
৩। ডেটাসমূহের ইনডেক্স তৈরি করলে পারফরমেন্স ভাল পাওয়া যায়।
৪। ইনডেক্স ফাইল মূল ডেটাবেজ ফাইলের কোনোরূপ পরিবর্তন না করে বিভিন্নভাবে সাজাতে পারে।
ইনডেক্সিং এর অসুবিধা সমুহ
১। যদি একাধিক ফিল্ডের উপর ইনডেক্সিং করা থাকে তাহলে কোনো ডেটা এডিট করলে ইনডেক্স ফাইল আপডেট করার জন্য দীর্ঘ সময় অপেক্ষা করতে হয়।
২। অনেক রেকর্ডের জন্য ইন্ডেক্স করা হলে অপেক্ষাকৃত বেশি মেমোরির প্রয়োজন হয়। তাছাড়া ইনডেক্স সংরক্ষণের জন্যও কিছু জায়গা লাগে।
৩। ডেটা এন্ট্রির ক্ষেত্রে ইনডেক্স ফাইলের রেফারেন্সসমূহ আপডেট হতে বেশ সময়ের প্রয়োজন হয়। সেজন্য ডেটা এন্ট্রি করতেও বেশি সময় লাগে।
সর্টিং এবং ইনডেক্সিং এর মধ্যে পার্থক্য আলোচনা
টেবিলের ডেটাগুলোর একটি ক্রম তৈরি করতে ইনডেক্সিং এবং সর্টিং উভয় পদ্ধতিই ব্যবহৃত হয়। ইনডেক্সিং একটি ইনডেক্স ফাইল তৈরি করে যা টেবিলের রেকর্ডগুলোর ফিজিক্যাল অবস্থানের পাশাপাশি সারিগুলোর লজিক্যাল ক্রম ধারণ করে, অপরদিকে একটি টেবিল সর্টিং করার সাথে সাথে টেবিলটির একটি সর্টেড অনুলিপি তৈরি হয়। সাধারণত, ইনডেক্স ফাইলটি একটি সর্টেড টেবিল সংরক্ষণের চেয়ে কম মেমোরির প্রয়োজন হয়। ইনডেক্সিং রেকর্ডগুলোর মূল ক্রম পরিবর্তন করে না, যেখানে সর্টিং রেকর্ডগুলোর মূল ক্রম পরিবর্তন করে। বাস্তবক্ষেত্রে সর্টিং এর চেয়ে ইনডেক্সিং বেশি ব্যবহৃত হয়।
Index তৈরি করার কমান্ড
১. টেবিল তৈরির সময় Index যোগ করা
CREATE TABLE students (
id INT PRIMARY KEY,
name VARCHAR(100),
email VARCHAR(100),
INDEX (email) -- email কলামে ইনডেক্স
);
👉 এখানে আমরা email কলামে index তৈরি করেছি।
২. বিদ্যমান টেবিলে নতুন Index যোগ করা
CREATE INDEX idx_email ON students(email);
👉 এখানে idx_email হলো index-এর নাম।
৩. Unique Index তৈরি করা
CREATE UNIQUE INDEX idx_unique_email ON students(email);
👉 একই email যেন দুইবার না থাকে তা নিশ্চিত করে।
৪. একাধিক কলামে Index তৈরি করা
CREATE INDEX index_name ON table_name (column1, column2);
কোন টেবিলে কী কী Index আছে দেখার কমান্ড
SHOW INDEX FROM students;
Index মুছে ফেলার কমান্ড
DROP INDEX idx_email ON students;
👉 এখানে idx_email নামের index ডিলিট হবে।