【发布时间】:2013-03-09 01:44:08
【问题描述】:
我正在使用 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
为我工作。我在这里有一个后续问题:
Restart primary key numbers of existing rows after deleting most of a big table
【问题讨论】:
-
你提到了 PostgreSQL 8.3。然而你标记8.4?请说清楚。无论哪种方式,我都敦促您考虑upgrading to a more recent version。
VACUUM进行了许多改进。 -
@ErwinBrandstetter:谢谢欧文。更新了问题。更正了我的 pg ver。有一个后续问题给你。谢谢。
-
请为第二个问题开始一个新问题。将主题分开。
-
@ErwinBrandstetter 谢谢。我为我的后续问题创建了一个新问题。 stackoverflow.com/questions/15526813/… 感谢您的帮助。
标签: postgresql postgresql-8.4 vacuum