17

我正在使用 PostgreSQL 8.4.13 数据库。
最近我在一个表中有大约 8650 万条记录。我几乎全部删除了——只剩下 5000 条记录。我跑了

reindex

vacuum analyze

删除行后。但是我仍然看到该表正在占用很大的磁盘空间:

jbossql=> SELECT pg_size_pretty(pg_total_relation_size('my_table'));
pg_size_pretty 
----------------
7673 MB

此外,剩余行的索引值仍然很高——比如在百万范围内。我想在清理和重新索引之后,剩余行的索引将从 1 开始。

我阅读了文档,很明显我对重新索引的理解是有偏差的。

但尽管如此,我的意图是在删除操作后减小表大小并降低索引值,以便SELECT从表中读取操作()不会花费那么长时间 - 目前我需要大约 40 秒才能从我的桌子。

更新

谢谢欧文。我已经更正了 pg 版本号。

vacuum full

为我工作。我在这里有一个后续问题:
删除大部分大表后重新启动现有行的主键数

4

1 回答 1

24

要实际将磁盘空间返回给操作系统,请运行VACUUM FULL.

进一步阅读:

于 2013-03-20T04:44:23.317 回答