数据库表大小没有按比例减少

时间:2013-03-20 04:40:37

标签: postgresql postgresql-8.4 vacuum

我正在使用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左右从我的表中只检索一条记录的秒数。

更新

感谢Erwin。我已经更正了pg版本号。

vacuum full

为我工作。我在这里有一个跟进问题:
Restart primary key numbers of existing rows after deleting most of a big table

1 个答案:

答案 0 :(得分:14)

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

详细了解related recent answer on dba.SE