news 2026/4/26 2:52:32

《100个“反常识”经验11:删了30万行数据表还是那么大?》

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
《100个“反常识”经验11:删了30万行数据表还是那么大?》

本期摘要

你用DELETE删了30万行数据,df -h一看磁盘空间没变,表文件还是那么大。这不是Bug,是InnoDB存储引擎的设计特性:DELETE只标记删除,不释放磁盘空间,留下的位置叫“空洞”。真正释放空间需要执行OPTIMIZE TABLE或ALTER TABLE ENGINE=InnoDB。本文还提供了检查表碎片的SQL脚本,以及大表优化的工具推荐。

一次让人困惑的操作

业务需要清理半年前的日志数据,大概30万行。执行:

sql

DELETE FROM operation_logs WHERE created_at < '2026-01-01';

Query OK, 300000 rows affected。

再查表大小:

sql

SELECT table_name, ROUND(((data_length + index_length) / 1024 / 1024), 2) AS size_mb FROM information_schema.tables WHERE table_name = 'operation_logs';

结果:还是2GB,和删除前一样。

为什么DELETE不释放磁盘空间?

InnoDB存储引擎中,DELETE操作只是把数据行标记为“已删除”,并不会真正回收磁盘空间。这些空间称为“空洞”,后续INSERT可以复用,但文件大小不会缩小。

操作行为磁盘空间
DELETE标记删除,空间留作复用不释放
INSERT优先填充空洞不增加文件大小
TRUNCATE重建表释放
OPTIMIZE整理碎片释放

如何真正释放空间?

方法一:OPTIMIZE TABLE(推荐)

sql

OPTIMIZE TABLE operation_logs;

原理:重建表,消除空洞,回缩磁盘空间。

注意:执行期间会锁表,建议在业务低峰期操作。

方法二:ALTER TABLE重建

sql

ALTER TABLE operation_logs ENGINE=InnoDB;

效果和OPTIMIZE类似,也会重建表。

方法三:TRUNCATE(全删)

sql

TRUNCATE TABLE operation_logs;

删除所有数据并重置表,空间彻底释放。仅适用于全表删除。

真实案例对比

方法执行前表大小执行后表大小锁表耗时
DELETE 30万行2GB2GB行锁几秒
OPTIMIZE2GB1.2GB全表锁几分钟
TRUNCATE2GB0.1MB全表锁瞬间

注意事项

  • 频繁DELETE+INSERT会产生大量空洞,定期OPTIMIZE是必要的

  • 大表OPTIMIZE耗时较长,建议用pt-online-schema-change工具在线操作

  • 磁盘空间紧张时,不要只靠DELETE,记得跟进OPTIMIZE

一键检查表碎片脚本

sql

SELECT table_name, ROUND(data_length/1024/1024, 2) AS data_mb, ROUND(data_free/1024/1024, 2) AS free_mb, ROUND(data_free/data_length*100, 2) AS free_pct FROM information_schema.tables WHERE table_schema = 'your_database' ORDER BY free_pct DESC;

free_mb越大,碎片越严重,建议执行OPTIMIZE。

下期预告

《100个“反常识”经验12:死锁日志怎么看?10分钟学会》

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/26 2:47:25

# 手写一个迷你Tomcat——三步理解Servlet容器的核心原理

手写一个迷你Tomcat——三步理解Servlet容器的核心原理造过轮子的人学框架有多快&#xff1f;我自己写完IOC和AOP&#xff0c;Spring就是换个API。同样的道理&#xff0c;手写一个迷你Tomcat&#xff0c;Tomcat的源码你就看得懂了。背景 我有一段时间想深入理解Tomcat的原理&am…

作者头像 李华
网站建设 2026/4/26 2:45:55

AIGNE DocSmith:基于AI Agent的自动化文档生成系统实战指南

1. 项目概述&#xff1a;当AI成为你的专属文档工程师在技术团队里&#xff0c;写文档这事儿&#xff0c;说多了都是泪。代码迭代飞快&#xff0c;功能日新月异&#xff0c;但文档却总是那个最容易被遗忘的角落。要么是“等代码稳定了再写”&#xff0c;结果一等就是遥遥无期&am…

作者头像 李华
网站建设 2026/4/26 2:41:38

支持向量机(SVM)原理与Python实战指南

1. 支持向量机&#xff1a;机器学习中的边界大师第一次接触支持向量机(SVM)是在处理一个医学图像分类项目时。当时我们尝试了各种分类器&#xff0c;但当数据维度升高到数百维时&#xff0c;只有SVM依然保持着稳定的表现。这种在高维空间中寻找最优决策边界的能力&#xff0c;让…

作者头像 李华
网站建设 2026/4/26 2:40:24

手写一个LRU缓存:从原理到高并发实战

前言你有没有想过&#xff1a;Redis的内存淘汰策略、MySQL的缓冲池、浏览器的后退按钮&#xff0c;背后都用到了同一个算法&#xff1f;LRU&#xff08;Least Recently Used&#xff0c;最近最少使用&#xff09;。今天&#xff0c;我们手写一个生产级的LRU缓存&#xff1a; O(…

作者头像 李华
网站建设 2026/4/26 2:36:25

从零到精通:AI大模型学习路线全解析!AI大模型学习路线(非常详细)收藏这一篇就够了

本文提供了一份详尽的AI大模型学习路线&#xff0c;涵盖了数学与编程基础、机器学习入门、深度学习深入、大模型探索以及进阶应用等方面。文章推荐了丰富的学习资源&#xff0c;包括经典书籍、在线课程和实践项目&#xff0c;帮助读者系统地学习和掌握AI大模型技术。同时&#…

作者头像 李华