我的编程空间,编程开发者的网络收藏夹
学习永远不晚

MySQL delete删除数据后,释放磁盘空间

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

MySQL delete删除数据后,释放磁盘空间

当 MySQL 数据库服务删除部分数据后;有些情况下这些数据占用的存储空间会释放掉,有些情况这些存储空间则不会释放。以下是对这种情况的简单说明:

一、删除表|清空数据表

当执行删除数据表或者清空数据表的全部数据操作时,都会释放掉相应的磁盘存储空间

drop table table_name;truncate table table_name;

在MyISAM和InnoDB(innodb_file_per_table)存储引擎中,数据信息存在在单个文件中。删除表操作和清空数据表操作都会释放空间。

二、删除表数据

delete from table_name [where xxx];

使用delete删除的时候,MySQL并没有把数据文件删除,而是将数据文件的标识位删除,没有整理文件,因此不会彻底释放空间。被删除的数据将会被保存在一个链接清单中,当有新数据写入的时候,MySQL会利用这些已删除的空间再写入。即,删除操作会带来一些数据碎片,正是这些碎片在占用硬盘空间。

三、优化表空间

方法一:

optimize table table_name ;

当表数据被大量删除后,释放占用的空间就变得很有必要了。会明显的提高查询速度。使用 optimize table。被删除的记录被保持在链接清单中,后续的 insert 操作会重新使用旧的记录位置。您可以使用 optimize table 来重新利用未使用的空间,并整理数据文件的碎片。optimize 适用于InnoDB和MyISAM存储引擎。

查看表占用硬盘空间大小的SQL语句如下:(默认用M做展示单位)

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

注意:该操作执行的时候会把该表格先写入一个tmp临时表,所以磁盘剩余空间必须大于表空间,否则会执行失败。
方法三:
先将整个表的结构和数据导出来,删除整个表,再创建表,最后导入数据。生产环境不建议用这个方法

总结
通过从InnoDB存储空间分布,delete对性能的影响可以看到,delete物理删除既不能释放磁盘空间,而且会产生大量的碎片,导致索引频繁分裂,影响SQL执行计划的稳定性;

同时在碎片回收时,会耗用大量的CPU,磁盘空间,影响表上正常的DML操作。

在业务代码层面,应该做逻辑标记删除,避免物理删除;为了实现数据归档需求,可以用采用MySQL分区表特性来实现,都是DDL操作,没有碎片产生。

另外一个比较好的方案采用Clickhouse,对有生命周期的数据表可以使用Clickhouse存储,利用其TTL特性实现无效数据自动清理。

来源地址:https://blog.csdn.net/qq_33271461/article/details/131629400

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

MySQL delete删除数据后,释放磁盘空间

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

MySQL delete删除数据后,释放磁盘空间

当 MySQL 数据库服务删除部分数据后;有些情况下这些数据占用的存储空间会释放掉,有些情况这些存储空间则不会释放。以下是对这种情况的简单说明: 一、删除表|清空数据表 当执行删除数据表或者清空数据表的全部数据操作时,都会释放掉相应的磁盘存
2023-08-18

MySQL Delete 删数据后磁盘空间未释放的原因

问题描述在 MySQL 中使用 delete 语句删除数据之后,监控视图中可用的磁盘空间没有增加,磁盘使用率没有下降等等。 解决方案delete 不释放空间是 MySQL 自身机制的原因,需要重建表才可以释放磁盘空间,可以参考的操作:执行
2022-05-28

mysql删除数据后怎么释放空间

在MySQL中,删除数据并不会立即释放空间,而是将空间标记为可重用。如果您想要释放空间,可以使用OPTIMIZE TABLE命令来重新组织表并释放未使用的空间。例如,如果您想释放一个表的空间,可以执行以下命令:OPTIMIZE TABLE
mysql删除数据后怎么释放空间
2024-05-21

Mongodb 删除集合数据后释放磁盘空间的操作步骤

目录删除集合Compact 集合分片集群删除集合在MongoDB当集合数据占用比较多,对其进行清理后,集合存储空间下降,但磁盘空间并没释放,对于具有活动更新的集合来说,有一些可重用的空间是正常的。过多的可重用空间通常是删除大量数据的结果。
Mongodb 删除集合数据后释放磁盘空间的操作步骤
2023-11-21

linux删除后未释放磁盘空间怎么解决

当在Linux中删除文件时,文件系统不会立即释放磁盘空间。相反,它将把空间标记为可用,以便在以后存储新文件。如果您使用的是ext2,ext3或ext4文件系统,可以使用以下方法来强制释放已删除文件的空间:确认文件系统已卸载:首先,请确保您
2023-10-25

oracle删除数据后怎么释放表空间

在Oracle数据库中,使用DELETE语句删除数据只会删除数据行,而不会释放表空间。如果需要释放表空间,可以使用以下方法:使用TRUNCATE语句:TRUNCATE语句会删除表中的所有数据并释放表空间。它比DELETE语句更快,因为它不会
2023-10-26

es删除数据后空间不释放怎么办

如果删除数据后,空间没有释放,可能是因为数据库中的数据并没有被真正删除,而是被标记为删除状态,数据仍然占用着空间。这种情况通常发生在数据库的垃圾回收机制没有及时执行或者数据被移动到了其他存储空间。为了释放空间,可以尝试以下操作:执行数据表
es删除数据后空间不释放怎么办
2024-04-09

sqlserver怎么删除数据释放空间

要删除SQL Server中的数据并释放空间,可以使用以下步骤:打开SQL Server Management Studio(SSMS)并连接到数据库服务器。在对象资源管理器中,展开数据库并找到要删除数据的表。右键单击该表并选择“编辑顶部
sqlserver怎么删除数据释放空间
2024-04-09

es删除数据后空间不释放如何解决

解决这个问题有多种方法,其中一种方法是使用数据库的压缩功能来释放被删除数据所占用的空间。另外,可以定期对数据库进行备份和恢复操作,这样可以重新组织数据库文件并释放未使用的空间。还可以使用数据库性能优化工具来检测和清理不必要的数据碎片,从而减
es删除数据后空间不释放如何解决
2024-04-09

oracle 删除用户后释放表空间

有个用户占用大量存储。删除之后表空间没有释放。。。。 网上百度一番后: 先使用语句查询表空间大小 HWM。HWM说明参考:https://www.cnblogs.com/husam/p/6604437.html select file_name, ceil((
oracle 删除用户后释放表空间
2019-10-09

db2删除数据后表空间不释放怎么解决

当删除数据后,表空间不会立即释放,这是因为DB2使用一种称为延迟空间释放(deferred space release)的机制来提高性能。延迟空间释放允许DB2在删除数据后保留已释放空间的信息,以便将来可以更高效地重用该空间。如果您想立即
db2删除数据后表空间不释放怎么解决
2024-04-09

编程热搜

目录