এই নিবন্ধে SQL Server-এ ইনডেক্স তৈরি, রিনেম এবং ডিলিট করার পদ্ধতি ব্যাখ্যা করা হয়েছে।
SQL Server-এ ইনডেক্স (Index) কী?
ইনডেক্সিং হলো রেকর্ড দ্রুত রিট্রিভ করার পদ্ধতি। ইনডেক্স ইনডেক্সড কলামে প্রদর্শিত প্রতিটি মানকে পয়েন্ট করে।
ইনডেক্স তৈরি
সিনট্যাক্স
CREATE [UNIQUE] [CLUSTERED | NONCLUSTERED] INDEX index_name
ON table_name (column1 [ASC | DESC], ..., column_n [ASC | DESC])
[INCLUDE (column1, ..., column_n)]
[WHERE condition]
[WITH (PAD_INDEX = {ON | OFF}
| FILLFACTOR = fillfactor
| SORT_IN_TEMPDB = {ON | OFF}
| IGNORE_DUP_KEY = {ON | OFF}
| STATISTICS_NORECOMPUTE = {ON | OFF}
| STATISTICS_INCREMENTAL = {ON | OFF}
| DROP_EXISTING = {ON | OFF}
| ONLINE = {ON | OFF}
| ALLOW_ROW_LOCKS = {ON | OFF}
| ALLOW_PAGE_LOCKS = {ON | OFF}
| MAXDOP = max_degree
| DATA_COMPRESSION = {NONE | PAGE | ROW}
[ON PARTITIONS ({number | range})]
[ON partition_scheme_name (column)
| ON filegroup_name | ON default_filegroup]
[FILESTREAM_ON {filegroup_name | partition_scheme_name}];
UNIQUE - ঐচ্ছিক, ইন্ডেক্স কলামের ভ্যালু কম্বিনেশন ইউনিক হবে তা নির্দেশ করে।
CLUSTERED - ঐচ্ছিক, লজিক্যাল অর্ডার যা টেবিলে সারিগুলোর ফিজিক্যাল অরেঞ্জমেন্ট নির্ধারণ করে (অর্থাৎ টেবিলের রেকর্ড ইনডেক্সের ফিল্ড অনুযায়ী সর্টেড থাকে)।
NONCLUSTERED - ঐচ্ছিক, লজিক্যাল অর্ডার যা টেবিলে সারিগুলোর ফিজিক্যাল অরেঞ্জমেন্ট নির্ধারণ করে না।
index_name - তৈরি করতে চাওয়া ইনডেক্সের নাম
table_name - যে টেবিল বা ভিউতে ইনডেক্স তৈরি হচ্ছে
column1, ..., column_n - যেসব কলাম থেকে ইনডেক্স তৈরি হচ্ছে
ASC | DESC - কলামের ভ্যালুগুলোর সর্ট অর্ডার
INCLUDE (column1, ..., column_n) - ঐচ্ছিক, নন-প্রাইমারি কলামগুলো Nonclustered ইনডেক্সের লিফ লেভেলে যোগ করা হয়।
WHERE condition - ঐচ্ছিক, কোন সারিগুলো ইনডেক্সে থাকবে তা নির্ধারণকারী শর্ত
ON partition_scheme_name (column) - ঐচ্ছিক, পার্টিশন স্কিম যা ফাইলগ্রুপ নির্ধারণ করে যেখানে পার্টিশন ম্যাপড
ON filegroup_name - ঐচ্ছিক, ইনডেক্স নির্দিষ্ট ফাইলগ্রুপে তৈরি হবে তা নির্দেশ করে
ON default_filegroup - ঐচ্ছিক, ডিফল্ট ফাইলগ্রুপ নির্দেশ করে
FILESTREAM_ON {filegroup_name | partition_scheme_name} - ঐচ্ছিক, Clustered ইনডেক্সের জন্য FILESTREAM ডেটার লোকেশন নির্দেশ করে
SQL Server-এ ইনডেক্সের উদাহরণ
CREATE INDEX danhba_chimuc
ON danhba (ho);
এই উদাহরণে, danhba_chimuc নামক একটি ইনডেক্স danhba টেবিলে তৈরি করা হয়েছে, যাতে ho নামে একটি ফিল্ড আছে। একাধিক ফিল্ড নিয়েও ইনডেক্স তৈরি করা যায়:
CREATE INDEX danhba_chimuc
ON danhba (ho, ten);
এই উদাহরণে danhba_chimuc ইনডেক্স danhba টেবিলে তৈরি হয়েছে, যাতে দুটি ফিল্ড ho এবং ten আছে। যেহেতু ASC বা DESC নির্দিষ্ট করা হয়নি, প্রতিটি ফিল্ডের জন্য ডিফল্ট আর্ডার অ্যাসেন্ডিং। ডিসেন্ডিং অর্ডার চাইলে:
CREATE INDEX danhba_chimuc
ON danhba (ho DESC, ten DESC);
উপরের CREATE INDEX কমান্ড শুধু ho এবং ten ডিসেন্ডিং অর্ডারে সর্টেড ইনডেক্স তৈরি করে।
ইউনিক ইনডেক্সের উদাহরণ
CREATE UNIQUE INDEX danhba_chimucduynhat
ON danhba (ho, ten);
এই উদাহরণে danhba_chimucduynhat নামক একটি ইনডেক্স danhba টেবিলে তৈরি করা হয়েছে যাতে ho এবং ten ফিল্ড থাকে, এবং এই দুটি ফিল্ডের কম্বিনেশন ইউনিক হবে তা নিশ্চিত করে। Clustered ইউনিক ইনডেক্সও তৈরি করা যায় যাতে টেবিলের সারিগুলোর ফিজিক্যাল অর্ডার ইনডেক্সের লজিক্যাল অর্ডার দ্বারা নির্ধারিত হয়।
CREATE UNIQUE CLUSTERED INDEX danhba_chimucduynhat
ON danhba (ho, ten);
নতুন তৈরি ইনডেক্সের নাম danhba_chimucduynhat যেটি দুটি ফিল্ড ho এবং ten-এর বানান, এবং টেবিলের সারিগুলোর সর্ট অর্ডারও এর অনুযায়ী পরিবর্তন হয়েছে।
SQL Server-এ ইনডেক্স রিনেম করা
সিনট্যাক্স
sp_rename 'table_name.old_index_name', 'new_index_name', 'INDEX';
table_name - ইনডেক্স তৈরি করা টেবিলের নাম
old_index_name - রিনেম করতে চাওয়া ইনডেক্সের নাম
new_index_name - ইনডেক্সের নতুন নাম
উদাহরণ
sp_rename 'danhba.danhba_chimuc', 'danhba_chimuc_ten', 'INDEX';
এই উদাহরণে danhba টেবিলের ইনডেক্স danhba_chimuc-কে danhba_chimuc_ten-এ রিনেম করা হয়েছে।
SQL Server-এ ইনডেক্স ডিলিট করা
সিনট্যাক্স
DROP INDEX table_name.index_name;
table_name - ইনডেক্স তৈরি করা টেবিলের নাম
index_name - ডিলিট করতে চাওয়া ইনডেক্সের নাম
উদাহরণ
DROP INDEX danhba.danhba_chimuc;
এই উদাহরণে danhba_chimuc নামক ইনডেক্স মুছে ফেলা হয়েছে।