我有一个问题。我有一个数据库,其中一个表被清除并每天再次填充数据。经过这样的许多操作后,访问此表的速度要慢得多。
我使用命令DELETE FROM table_name
然后COPY INTO table_name...
清除了此表 - 我没有使用VACCUM
。现在我删除了table_name并再次创建它 - >表现再次处于高位。
现在我使用DELETE FROM ...
代替TRUNCATE table_name
,我想知道它是否会更好用。
问题可能是索引(这是在创建表时创建的)?
我正在使用PostgreSQL 8.1.23。
答案 0 :(得分:3)
8.1是旧的,不受支持,在真空中有很多限制,应尽快升级到现代版本。它不仅仅是就地升级,您必须进行转储和重新加载,并且需要阅读文档 - 升级文档和发行说明的升级说明部分主要版本8.2,8.3,8.4,9.0,9.1和9.2。
使用TRUNCATE
代替DELETE
确实有帮助。在加载表之前,您还应该DROP
索引,之后重新CREATE
。请参阅the manual。
在一个模糊的现代版本中,您还应该在同一个事务中执行TRUNCATE
和COPY
,因为这允许PostgreSQL执行几个有用的优化。