INT টাইপের কলামে ইনডেক্স যোগ করা বড় টেবিলে ক্যোয়ারি পারফরম্যান্স 劇的に উন্নত করতে পারে, কিন্তু ছোট টেবিলে এটি অপ্রয়োজনীয় ওভারহেড যোগ করে।
ইনডেক্স সহ টেবিল তৈরি
CREATE TABLE index_int_demo (
user_id INT,
user_name VARCHAR(20),
user_age INT,
INDEX idx_user_id (user_id)
);
টেবিল কাঠামো যাচাই
DESC index_int_demo;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| user_id | int(11) | YES | MUL | NULL | |
| user_name| varchar(20) | YES | | NULL | |
| user_age | int(11) | YES | | NULL | |
+----------+-------------+------+-----+---------+-------+
Key কলামে MUL বোঝায় ইনডেক্স আছে (নন-ইউনিক)।
নমুনা ডেটা ও ক্যোয়ারি
INSERT INTO index_int_demo VALUES
(1001, 'John', 23), (1002, 'Sam', 25), (1003, 'Carol', 22), (1004, 'Mike', 26);
SELECT * FROM index_int_demo WHERE user_id = 1004;
ইনডেক্স ব্যবহার করার সিদ্ধান্ত নেওয়ার মানদণ্ড
| ফ্যাক্টর | ইনডেক্স যোগ করুন | ইনডেক্স যোগ করবেন না |
|---|---|---|
| সারির সংখ্যা | > 10,000 সারি | < 1,000 সারি |
| সিলেক্টিভিটি (Cardinality) | উচ্চ (অনেক অনন্য মান) | নিম্ন (বহু ডুপ্লিকেট) |
| ক্যোয়ারি প্যাটার্ন | সাবশ WHERE/JOIN-এ এই কলাম | নিরapéকশ ক্যোয়ারি বা فول স্ক্যান |
| লিখার ফ্রিকোয়েন্সি | কম INSERT/UPDATE/DELETE | বহুল লিখার অপারেশন |
ইনডেক্সের খরচ
- স্টোরেজ: প্রতিটি ইনডেক্স এন্ট্রি এক্সট্রা স্পেস নেয়
- লিখার গতি: INSERT/UPDATE/DELETE ধীর হয় (ইনডেক্স মেইনটেইন করতে হয়)
- মেমরি: বাফার পুলে ইনডেক্স পেজ রাখতে হয়
ইনডেক্স ব্যবহার হচ্ছে কিনা যাচাই
EXPLAIN SELECT * FROM index_int_demo WHERE user_id = 1004;
type: ref বা range দেখলে ইনডেক্স ব্যবহার হচ্ছে। type: ALL মানে فول টেবিল স্ক্যান।
কম্পোজিট ইনডেক্স (বহু কলাম)
-- WHERE user_id = ? AND user_age = ? টাইপ ক্যোয়ারির জন্য
ALTER TABLE index_int_demo ADD INDEX idx_id_age (user_id, user_age);
কালাম অর্ডার mater: সবচেয়ে সিলেক্টিভ কলাম প্রথমে রাখুন।