ほとんどの場合、クエリで一緒に使用される2 つのtimestamp
列 (つまりstarts_at
と) にインデックスを付けるにはどうすればよいですか ( など)? 両方の列に複合インデックスを作成するか、それぞれに個別にインデックスを作成しますか?ends_at
starts_at >= ? AND ends_at <= ?
ところで、問題があればPostgresを使用しています:)
ほとんどの場合、クエリで一緒に使用される2 つのtimestamp
列 (つまりstarts_at
と) にインデックスを付けるにはどうすればよいですか ( など)? 両方の列に複合インデックスを作成するか、それぞれに個別にインデックスを作成しますか?ends_at
starts_at >= ? AND ends_at <= ?
ところで、問題があればPostgresを使用しています:)
これらの2つの列が、正確に同じタイムスタンプを含む行数が少ない真のタイムスタンプである場合、範囲スキャンでは最初の値を1つ選択できないため、複合キーは実際には使用されません。フィールドが日付の場合、タイムスタンプが一致しない場所で日付が一致することが多いため、これは異なる場合があります。それには小さな利点がありますが、私の経験では、それはそれほど大きくはありません。
十分に大きくて密度の高いデータを使用している場合(1回のインデックススキャンでインデックスの大部分をスキャンする必要がある場合)、クエリプランナーは複数のインデックスを使用してビットマップと組み合わせることができます。
http://www.postgresql.org/docs/current/static/indexes-bitmap-scans.html
このタイプの質問と同様に、データセットでテストを実行する価値があります。