删除大量行后是否需要重新索引和清空表?

cow*_*god 11 postgresql database-performance vacuum

我正在运行一个 PostgreSQL 数据库,它有几个存储日志信息的表。此信息仅用于报告目的,如果超过 30 天,则会转储到文件中并从数据库中删除。

可能有数百万行被删除,每次删除后我们都在运行一个 REINDEX。

这是否足够,或者我们还应该运行 VACUUM 或 VACUUM ANALYZE 吗?还是不需要 REINDEX 而我们应该运行 VACUUM 或 VACUUM ANALYZE?

我们正在使用 PostgreSQL 8.2.3,我认为它不允许自动清空。

hma*_*ett 14

您应该执行 VACUUM ANALYZE,因为 VACUUM 将允许重复使用已删除数据使用的空间并防止事务回绕,并且 ANALYZE 将更新计划器统计信息,这将为您的报告查询带来更好的查询计划。

理论上不需要 REINDEX,但您可能会发现它会导致更好的性能,因为索引是连续的。

8.2 的相关文档页面在这里(例行重新索引)这里(例行吸尘)