首页 帮助中心 新加坡服务器 MySQL delete删除数据后 如何释放磁盘空间
MySQL delete删除数据后 如何释放磁盘空间
时间 : 2024-06-24 12:26:06 编辑 : 华纳云 阅读量 : 520

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';

还可以把整个表结果和数据导出来,删除整个表,再创建导入数据,但是这个方式使用前提是排除生产环境。更多技术分享可前往华纳云官网了解!

华纳云 推荐文章
服务器日志分析工具有哪些及具体使用方法 Linux中Linfo的安装和使用完整教程 如何理解类数据共享及类数据共享如何改变JVM的启动时间 SpringBoot中rabbitMq设置不自动检查连接 如何在Windows Server 2019实现IIS配置伪静态支持? 如何在Linux系统挂载未分配硬盘空间 当ubuntu硬盘自动挂载失败怎么办 ​基于redis的分布式锁的简单实现方法 Ubuntu安装sysv-rc-conf时报错如何解决 Windows宝塔面板详细安装流程
客服咨询
7*24小时技术支持
技术支持
渠道支持