删除大量行后,是否需要对表进行 REINDEX 和 VACUUM ?

删除大量行后,是否需要对表进行 REINDEX 和 VACUUM ?

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

可能会删除数百万行,并且每次删除后我们都会运行 REINDEX。

这是否足够,还是我们还应该运行 VACUUM 或 VACUUM ANALYZE?或者 REINDEX 没有必要,我们应该只是运行 VACUUM 或 VACUUM ANALYZE?

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

答案1

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

理论上不需要 REINDEX,但您可能会发现,由于索引是连续的,因此它可以带来更好的性能。

8.2 的相关文档页面是此处(常规重新索引)这里(例行吸尘)

相关内容