リレーションで作成したインデックスの数に関係なく、特定のクエリで使用されるのはそのうちの1つだけです(クエリ、統計などに依存します)。したがって、あなたの場合、2つの単一列のインデックスを作成しても累積的な利点は得られません。インデックスから最大のパフォーマンスを得るには、(場所、タイムスタンプ)で複合インデックスを使用することをお勧めします。
... WHERE timestamp BETWEEN smth AND smth
のようなクエリに注意してください ... WHERE location = 'smth'
のようなクエリでは、上記のインデックスは使用されません または... WHERE location = 'smth' AND timestamp BETWEEN smth AND smth
意思。これは、インデックスの最初の属性が検索と並べ替えに不可欠だからです。
実行することを忘れないでください
ANALYZE;
統計を収集するためのインデックス作成後。
更新: @MondKinとして コメントで言及されているように、特定のクエリは実際には同じリレーションで複数のインデックスを使用できます。たとえば、OR
でクエリを実行します a = 123 OR b = 456
のような句 (両方の列にインデックスがあると仮定します)。この場合、postgresは両方のインデックスに対してビットマップインデックススキャンを実行し、結果のビットマップのユニオンを構築して、ビットマップヒープスキャンに使用します。特定の条件では、同じスキームがAND
に使用される場合があります クエリがありますが、和集合の代わりに交差点があります。