MySQL delete删除数据后,这些被删除的数据有可能还会占用一些存储空间。所以使用中可能需要释放掉。
在MyISAM和InnoDB(innodb_file_per_table)存储引擎中,数据信息存在单个文件中。删除表操作和清空数据表操作都会释放空间。删除表/清空数据表的全部数据时,会释放掉相应的磁盘存储空间。
drop table table_name;
truncate table table_name;
使用使用delete删除的时候,MySQL并没有把数据文件删除,只是删除了数据文件的标识位,没有整理文件,没有彻底释放空间。被删除的数据将保存在一个链接清单中,当有新数据写入的时候,MySQL会利用这些已删除的空间再写入。即,删除操作会带来一些数据碎片,正是这些碎片在占用硬盘空间。想要删除表数据。
delete from table_name [where xxx]
如果希望优化表空间,可以使用:
optimize table table_name ;
在大量删除表数据后,释放空间非常有必要。释放这些空间有利于提高数据库的查询速度,如使用optimize table,被删除的记录会存于链接清单中,后续insert操作会重新使用旧记录位置。通过optimize table可以重新利用未使用空间,整理数据碎片。optimize table适用于InnoDB和MyISAM存储引擎。
查看表占用硬盘空间大小的SQL语句:
SELECT TABLE_NAME, (DATA_LENGTH+INDEX_LENGTH)/1048576 as size_Mb, TABLE_ROWS FROM information_schema.tables WHERE TABLE_SCHEMA='wow_tencent_1' AND TABLE_NAME='user'
或者是通过:
alter table tab_name ENGINE = 'InnoDB';
还可以把整个表结果和数据导出来,删除整个表,再创建导入数据,但是这个方式使用前提是排除生产环境。更多技术分享可前往华纳云官网了解!