2016-09-02 7 views
3

このトピックに関する既存の記事の一部を読んだ結果は分かりませんでした。複数のインデックスとpostgresqlの複数のカラムの1つのインデックス

過去10年間、100か所の特定のデータがあります。テーブルには約8億行があります。私は、主に各場所の年次統計を生成する必要があります。時には毎月の変動統計と毎時変動統計も生成する必要があります。場所と年の2つのインデックスを生成するか、場所と年の両方でインデックスを生成する必要があるかどうかは疑問です。私のプライマリキーは現在シリアル番号です(おそらくプライマリキーとして場所とタイムスタンプを使用できます)。

ありがとうございました。

答えて

4

リレーションで作成したインデックスの数にかかわらず、特定のクエリで使用されるインデックスは1つだけです(クエリ、統計などに依存します)。あなたの場合、2つの単一の列インデックスを作成することから累積的な利点は得られません。インデックスからのパフォーマンスを最大限に引き出すには、(location、timestamp)のコンポジットインデックスを使用することをお勧めします。

などのクエリでは、... WHERE location = 'smth'... WHERE location = 'smth' AND timestamp BETWEEN smth AND smthのようなクエリは上記のインデックスを使用しません。これは、索引の最初の属性が検索とソートに重要であるためです。

は、統計情報を収集するために、インデックス作成後

ANALYZE; 

を実行することを忘れないでください。

1

(location、timestamp)のインデックスは、大文字と小文字を区別する2つのインデックスより優れています。列の順序が重要であることに注意してください。

+0

ありがとうございます。列の順序はどのようにパフォーマンスに影響しますか? –

+0

検索条件が 'location =" something "AND something timetamp something something and something'のようなものであれば'(location、timestamp) 'のインデックスを使用できますが、'(timestamp、location) 'のインデックスはない。 – redneb

関連する問題