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

VJ *_*ons 10 postgresql vacuum postgresql-8.4

我正在使用PostgreSQL 8.4.13数据库.
最近我在一张桌子里有大约8650万条记录.我删除了几乎所有这些 - 只剩下5000条记录.我跑了

reindex
Run Code Online (Sandbox Code Playgroud)

vacuum analyze
Run Code Online (Sandbox Code Playgroud)

删除行后.但我仍然看到该表占用了大量的磁盘空间:

jbossql=> SELECT pg_size_pretty(pg_total_relation_size('my_table'));
pg_size_pretty 
----------------
7673 MB
Run Code Online (Sandbox Code Playgroud)

此外,剩余行的索引值仍然很高 - 就像在百万范围内一样.我想在吸尘和重新索引之后,剩余行的索引将从1开始.

我阅读了文档,很清楚我对重新索引的理解是不正确的.

但是,我的目的是减少删除操作后的表大小并降低索引值,以便表中的read operations(SELECT)不会花费那么长时间 - 目前我需要大约40秒来从我的内容中检索一条记录表.

更新

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

vacuum full
Run Code Online (Sandbox Code Playgroud)

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

Erw*_*ter 14

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

关于dba.SE这个密切相关的最近答案的更多细节.