2012-09-27 12 views
6

データベースに多数のインデックスを持っているときに読んでいます。パフォーマンスを著しく損なう可能性がありますが、PostgreSQLのドキュメントでは何も見つかりません。PostgreSQL SELECTの速度は、テーブルのインデックスが多すぎると悪影響を受けますか?

私は100列と10億行のような非常に大きなテーブルを持っています。多くの場合、多くの分野で多くの検索を行う必要があります。

多くのインデックスを追加すると(たぶん10個の一意の列インデックスと5または7個の3個の列インデックス)、PostgreSQLテーブルのパフォーマンスが低下しますか?

EDIT:パフォーマンスが低下すると、ロー(選択)をフェッチする際のパフォーマンスを意味します。データベースは1か月に1回更新されるため、更新と挿入の時間は問題になりません。

+0

理論的には、書き込みのパフォーマンスRDBMSテーブルへのアクションは、各書き込み時にインデックスを維持する必要があります。この例では、ドキュメンテーションの中にノートがないため、パフォーマンスのトレードオフがないという意味ではありません。常にそこにあります。いつものように、アプリケーション/データベースをプロファイルして、このトレードオフの正確なコストを確認してください。 –

+5

[SQLインデックスについて知りたいことがあればすべて](http://use-the-index-luke.com/) –

+0

データベースは月に一度更新されるなど、挿入または更新のパフォーマンスはあまり重要でない – Topo

答えて

6

テーブルの内容が変更されたとき、インデックスは、インデックスとするとき、それは必要ではないですし、シーケンシャルスキャンを使用する際のPostgreSQLの問い合わせプランナが決めることができます(つまりINSERTUPDATEDELETE

維持されていますより最適です。

索引が多すぎると、フェッチではなく変更のパフォーマンスが低下します。

+0

多くのインデックスを持つ唯一の貿易は、スペースと更新/挿入時間です。 – Topo

+0

@Topo基本的にはい。私はプランナーがあまりにも多くのインデックスによって混乱することは期待しません:) – dezso

+0

はい、不要なインデックスは、クエリプランナーによって使用されません。 –

1

これらの列を含むinsertおよびupdateのインデックスを更新する必要があります。

0

私は自分のサイト上でそのことについていくつかのグラフを持っている:http://use-the-index-luke.com/sql/dml

インデックスは、純粋な冗長性です。このテーブルには、 にも格納されているデータのみが含まれています。書き込み操作の間、データベースはそれらの の冗長性を一貫して保持する必要があります。具体的には、挿入、削除 および更新は、影響を受けるデータのコピーを保持するインデックスだけでなく、テーブルにも影響します。

章のタイトルは、インデックスを持つことができることへの影響を示唆:

挿入 - インデックス

削除から直接的な利益を取ることができない - where句

更新のためのインデックスを使用しています - ありませんテーブルのすべてのインデックスには影響しません

+1

詳細については、(免責された)サイトへのリンクを付けて、ここにコンテンツの重要な部分を投稿する方がはるかに便利です。 – PearsonArtPhoto

関連する問題