Postgres 9.4中进行完全清空后,我需要重新索引吗?

40

我正在使用Postgres 9.4。

我刚刚运行了vacuum full。我阅读了vacuum和vacuum full之间的差异,并认真考虑是否应该运行vacuum或vacuum full。据我所知,我需要运行vacuum full,我的数据库大小从48 GB降至24 GB。

在运行vacuum full后,旧索引是否已经过时,我需要运行reindex吗?

我运行了"vacuum full verbose analyze",因此analyze会随着vacuum full一起完成。

我在几个地方阅读到,在Postgres > 9.0中,运行vacuum full后不需要重新索引,但我想确保这是否属实。


1
由于您已经运行了"分析(analyze)",因此不需要重新索引,因为它本身就会收集统计信息。请查阅文档http://www.postgresql.org/docs/8.4/static/sql-analyze.html获取更多信息。 - Rahul
1个回答

68
VACUUM FULL执行后立即进行REINDEX无用的,因为VACUUM FULL会重建索引。这在9.4文档中的Recovering Disk Space中有提到:

...要想回收它占用的额外磁盘空间,需要使用VACUUM FULL,或者使用CLUSTER或一个表重写变量ALTER TABLE中的一种。 这些命令会重写整个新的表,并且为其构建新的索引

您是正确的,在9.0版本之前并非如此,VACUUM FULL的重新实现方式不同。
在8.4版本之前,VACUUM的参考文档提到了重新索引的必要性:

FULL选项不会缩小索引; 仍然建议定期进行REINDEX。实际上,删除所有索引、VACUUM FULL,再重建索引通常更快。

但是现在这个警告已经过时了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接