首页/数据/SQL 速查/表空间回收与重建:OPTIMIZE / VACUUM FULL
本包目录(311 条)
查询基础33 条连接与子查询40 条聚合与窗口函数54 条函数速查60 条变更与事务52 条
性能与执行计划72 条

表空间回收与重建:OPTIMIZE / VACUUM FULL

大量删除后空间不一定归还:MySQL 的 OPTIMIZE TABLE 对 InnoDB 近似重建表;PostgreSQL 用 VACUUM FULL 或 pg_repack。

SQL 速查数据更新于 2026-10-12

MySQL

MySQL
OPTIMIZE TABLE orders;
-- 对 InnoDB 近似等价于重建表并更新统计,释放未使用空间

ALTER TABLE orders FORCE;   -- 重建的等价写法之一

PostgreSQL

PostgreSQL
VACUUM (VERBOSE) orders;    -- 常规清理,通常不缩小文件
VACUUM FULL orders;         -- 重写表并归还空间(持有排他锁)
-- 在线替代:pg_repack 扩展
MySQL 特性重建期间占额外空间;需要评估磁盘余量
PG 常规清理autovacuum 处理死元组但通常不缩小文件
风险重建与排他锁操作都应与业务低峰配合

易错点

  • 频繁 OPTIMIZE 或 VACUUM FULL:重建的 IO 与锁代价高,常规清理交给 VACUUM 与 autovacuum
  • 磁盘余量不足时重建:需要与原表相当的额外空间,空间不足会中途失败

数据来源与参考

  • MySQL 8.0 Reference Manual · OPTIMIZE TABLE Statement
  • PostgreSQL Documentation · Routine Vacuuming
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌