কম্পিউটার টিউটোরিয়াল

MySQL-এ কিছু রো ডিলিট করার পর টেবিল অপ্টিমাইজ করা (OPTIMIZE TABLE)

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 - শুধু স্ট্যাটিস্টিক্স আপডেট করে (দ্রুত, লক কম)।

  1. MySQL에서 일괄 업데이트(Batch Update) 수행하기

  2. MySQL에서 데이터 삭제 후 AUTO_INCREMENT를 1부터 다시 시작하려면 TRUNCATE

  3. MySQL-এ INSERT INTO SELECT ব্যবহার করে এক টেবিল থেকে অন্য টেবিলে রো কপি করা

  4. MySQL-এ টেবিলের অস্তিত্ব যাচাই করা