一、问题背景
“删了90%数据,数据库文件为啥纹丝不动?这是MySQL的bug吗?”
这个问题也戳中了很多人的痛点——明明删了大把数据,硬盘空间死活不释放!
你是不是也遇到过:
- 执行DELETE后,磁盘空间未释放
- .ibd文件大小不变,运维报警频发
- 明明数据量减少,统计信息却 “岿然不动”
别慌,这真不是Bug! 而是 InnoDB 存储引擎的底层设计机制决定的。今天就来扒开 InnoDB 的底层逻辑,教你 3 招驯服 “顽固” 的数据库文件。
二、删数据≠丢空间:MySQL 的 “假删除” 套路
先看一组颠覆认知的实验:
Step 1:创建 200 万条数据的表
-- 创建测试数据库
CREATEDATABASEtest;
-- 创建测试表
CREATETABLE test_demo (
idINT PRIMARY KEY AUTO_INCREMENT,
nameVARCHAR(100),
contentTEXT,
create_time DATETIME
) ENGINE=InnoDB;