面试官问:数据库 delete 表数据,磁盘空间还是被一直占用,为什么?

DELETE 操作将数据标记为可重用,但不会物理删除它。

InnoDB以B+树和页存储(1 6 KB)为单位。

删除该行并将其标记为重复使用。

删除页面并将其添加为书签以供重复使用。

容量不会立即返回给操作系统。

InnoDB这样设计是为了保证性能。

数据插入可能无法填补这个漏洞。

OPTIMIZETABLE 回收空间。

语法:OPTIMIZETABLE table_name;
该表将被锁定并需要很长时间。

ALTERTABLE ENGINE=INNODB;
重建表并对数据进行排序。

OnlineDDL 减少了锁定表。

ALGORITHM=INPLACE;
LOCK=NONE;
由于 MySQL 的设计,DELETE 不会释放空间。

使用OPTIMIZETABLE或ALERTABLE来解决。

监视表空间以避免频繁重构。

VFP如果删除数据库 数据库表会不会变成自由表?