0

我有个问题。我有一个数据库,其中一个表每天一次被清除并再次填充数据。经过像这样的许多操作后,访问该表的速度要慢得多。

我用命令清除了这张表,DELETE FROM table_name然后COPY INTO table_name...- 我没有使用VACCUM. 现在我删除了 table_name 并再次创建它 -> 性能再次处于高水平。

现在代替DELETE FROM ...我使用TRUNCATE table_name,我想知道它是否会更好。

也许问题出在索引(这是在创建表期间创建的)?

我正在使用 PostgreSQL 8.1.23。

4

1 回答 1

3

8.1 很旧,不受支持,在真空方面有很多限制,应该尽快升级到现代版本。这不仅仅是就地升级,您必须进行转储并重新加载,并且您需要阅读文档- 主要版本 8.2、8.3、8.4、9.0 的发行说明的升级文档和升级说明部分, 9.1 和 9.2。

使用TRUNCATE而不是DELETE应该确实有帮助。您还应该DROP在加载表之前建立索引并CREATE在之后重新建立索引。请参阅手册

在一个模糊的现代版本中,您还应该在同一个事务中执行TRUNCATEand COPY,因为这允许 PostgreSQL 执行一些有用的优化。

于 2013-08-05T09:25:16.617 回答