MySQL-এ রো ডিলিট করার পর ডিস্ক স্পেস উন্মুক্ত করা এবং টেবিল পারফরম্যান্স বেড়াতে OPTIMIZE TABLE কমান্ড ব্যবহার করা হয়।
উদাহরণ: টেবিল তৈরি এবং ডেটা ইনসার্ট
mysql> create table DemoTable(
Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
Name varchar(100)
);
Query OK, 0 rows affected (1.38 sec)
mysql> insert into DemoTable(Name) values('Chris');
Query OK, 1 row affected (0.27 sec)
mysql> insert into DemoTable(Name) values('Robert');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable(Name) values('Bob');
Query OK, 1 row affected (0.22 sec)
mysql> insert into DemoTable(Name) values('David');
Query OK, 1 row affected (0.38 sec)
সকল রেকর্ড দেখানো
mysql> select * from DemoTable;
+----+--------+ | Id | Name | +----+--------+ | 1 | Chris | | 2 | Robert | | 3 | Bob | | 4 | David | +----+--------+ 4 rows in set (0.00 sec)
রো ডিলিট করা (Id 1 এবং 3)
mysql> delete from DemoTable where Id IN(1,3); Query OK, 2 rows affected (0.29 sec)
mysql> select * from DemoTable;
+----+--------+ | Id | Name | +----+--------+ | 2 | Robert | | 4 | David | +----+--------+ 2 rows in set (0.00 sec)
টেবিল অপ্টিমাইজ করা
mysql> optimize table DemoTable;
+------------------+----------+----------+-------------------------------------------------------------------+ | Table | Op | Msg_type | Msg_text | +------------------+----------+----------+-------------------------------------------------------------------+ | web.DemoTable | optimize | note | Table does not support optimize, doing recreate + analyze instead | | web.DemoTable | optimize | status | OK | +------------------+----------+----------+-------------------------------------------------------------------+ 2 rows in set (4.32 sec)
OPTIMIZE TABLE কী করে?
- InnoDB: টেবিল রিক্রিয়েট করে (COPY + ANALYZE) — ফрагমেন্টেশন দূর করে, ইনডেক্স রিবিল্ড করে, স্ট্যাটিস্টিক্স আপডেট করে
- MyISAM: ডেটা ফাইল ডিফ্র্যাগমেন্ট করে, ইনডেক্স রিকভার করে
- ARCHIVE: কম্প্রেশন রিকম্পিউট করে
মেসেজ ব্যাখ্যা
note: Table does not support optimize, doing recreate + analyze instead- InnoDB-এ OPTIMIZE = ALTER TABLE ... FORCE (রিক্রিয়েট)status: OK- সফলভাবে সম্পন্ন
কখন OPTIMIZE TABLE চালাবেন?
- বড় পরিমাণ রো
DELETEবাUPDATEকরার পর - টেবিলে ফ্র্যাগমেন্টেশন বেশি হলে (Data_free > 0)
- মাসিক/সাপ্তাহিক মেইনটেনেন্স উইন্ডোতে
SHOW TABLE STATUS-এData_freeবড় দেখলে
সতর্কতা
- টেবিল লক হয় (InnoDB-এ অনলাইন DDL হলেও কিছু লক লাগে)
- বড় টেবিলে সময় লাগে — মেইনটেনেন্স উইন্ডোতে চালান
- পর্যাপ্ত ডিস্ক স্পেস দরকার (টেম্পোরারি কপির জন্য)
বিকল্প: ANALYZE TABLE - শুধু স্ট্যাটিস্টিক্স আপডেট করে (দ্রুত, লক কম)।