一、立即释放磁盘空间

以下操作会在删除数据后立即释放磁盘空间:

  1. drop table table_name
  2. truncate table table_name
  3. delete from table_name (MyISAM )

二、不立即释放磁盘空间

以下操作删除数据后不立即释放磁盘空间:

  1. delete from table_name where xxx
  2. delete from table_name (InnoDB)

三、强制释放磁盘空间

delete from table_name (InnoDB) 只是将删除的数据标记为已删除,并不真正释放所占用的磁盘空间,这是mysql的bug: mysql bug;想delete操作后立即释放磁盘空间,还要看mysql数据库的配置:

  1. innodb_file_per_table=off (默认配置)
    所有数据都保存在ibdata中,磁盘空间只能通过备份/还原数据库来释放;

  2. innodb_file_per_table=on
    delete操作后可以通过执行optimize table table_name释放空间

参考文章
http://blog.csdn.net/seven_3306/article/details/30254299
https://www.percona.com/blog/2013/09/25/how-to-reclaim-space-in-innodb-when-innodb_file_per_table-is-on/
https://dev.mysql.com/doc/refman/5.5/en/innodb-truncate-table-reclaim-space.html