0

質問があります。1日に1回、1つのテーブルがクリアされ、データが再び埋められるデータベースがあります。このような多くの操作の後、このテーブルへのアクセスは非常に遅くなります。

コマンドでこのテーブルをクリアした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も実行する必要があります。これにより、PostgreSQL はいくつかの有用な最適化を実行できるようになります。COPY

于 2013-08-05T09:25:16.617 に答える