2017-11-03 3 views
1

Postgresデータベースにテーブルがあり、データが永続的に挿入されています。データへの高速アクセスが必要なため、インデックスを作成します。ほとんどのデータがすでに挿入された後にインデックスを作成する方が良いとわかっていますが、そのような瞬間はありません。データは多かれ少なかれ連続して挿入されます。いつこのようなテーブルにインデックスを作成する必要がありますか?Postgresqlのインデックス

1時間あたり約40-50 000インサートがあり、データは数週間(多分2〜3ヶ月)保管する必要があります。更新も削除もありません。

sqliteの古い実装では、1時間ごとにデータベース(別ファイル)が作成されましたが、インデックスを作成するには時間がかかりすぎ、挿入直後(5〜10分後)に高速アクセスが必要でした。

+2

[table partitioning](https://www.postgresql.org/docs/current/static/ddl-partitioning.html)に興味があるかもしれません。このシナリオでは、通常、パーティションの作成直後に、各パーティションごとにインデックスを個別に作成する必要があります。 – klin

+0

あなたのインデックスを作成するだけで、挿入物は最新の状態に保たれますが、問題は何ですか? –

+1

これは1秒あたり11-14インサートです。それはあなたのテストがそうでないことを証明しない限り、インサートで更新されているインデックスの影響についてあまり心配する必要はありません。 – eurotrash

答えて

0

表のマテリアライズド・ビューを作成します。ビューではなく、テーブルにインデックスを作成します。テーブルに挿入し、ビューから読み込みます。

5分ごとのように、リフレッシュマテリアライズドビューが定期的に更新されます。また、CONCURRENTLYパラメーターの使用を検討することもできます。

しかし、この方法では、最新の更新データが表示されません。そして、パフォーマンスの特性が試してみることが望ましいかどうかは言うまでもありません。

関連する問題