今天试验了mysql (版本 5.5.27) 大量的delete 后空间如何回收问题
今天试验了mysql (版本 5.5.27) 大量的delete 后空间如何回收问题
一、myisam表
optimize table tablename; #
二、innodb表(独立表空间)--innodb-file-per-table
a.方法一:optimize table m;
mysql> delete from m where id =3;
query ok, 262144 rows affected (11.12 sec)
mysql> optimize table m ;
+-------+----------+----------+-------------------------------------------------------------------+
| table | op | msg_type | msg_text |
+-------+----------+----------+-------------------------------------------------------------------+
| stu.m | optimize | note | table does not support optimize, doing recreate + analyze instead |
| stu.m | optimize | status | ok |
+-------+----------+----------+-------------------------------------------------------------------+
you can make optimize table work on other storage engines by starting mysqld with the --skip-new or --safe-mode option. in this case, optimize table is just mapped to alter table.
mysql> optimize table m ;
query ok, 360448 rows affected (15.33 sec)
records: 360448 duplicates: 0 warnings: 0
[root@localhost data]# ls -lh stu/
total 30m
-rw-rw---- 1 mysql mysql 8.4k may 6 21:12 m.frm
-rw-rw---- 1 mysql mysql 29m may 6 21:15 m.ibd
[root@localhost data]# ls -lh stu/
total 21m
-rw-rw---- 1 mysql mysql 8.4k may 6 21:15 m.frm
-rw-rw---- 1 mysql mysql 20m may 6 21:16 m.ibd
b.方法二: 使用 alter table table_name engine=innodb #删除旧表,建立新表。
[root@localhost data]# ls -lh stu/
total 41m
-rw-rw---- 1 mysql mysql 8.4k may 6 20:44 m.frm
-rw-rw---- 1 mysql mysql 25m may 6 21:04 m.ibd
[root@localhost data]# ls -lh stu/
total 18m
-rw-rw---- 1 mysql mysql 8.4k may 6 21:03 m.frm
-rw-rw---- 1 mysql mysql 17m may 6 21:04 m.ibd
三、innodb 共享表空间:
5.5 版本及之前的版本,我只用过 mysqldump出 表数据,然后导入到新的库(独立表空间),也就相当于重建库的过程。
各位有好的方法请多多指教!!
,