開始時刻と終了時刻を含むイベントを表すテーブルがあります (DATE、TIMESTAMP、または TIMESTAMP WITH TIME ZONE 形式で保存されます)。
MY_TABLE:
DATA START END
A 1/11/2012 10:00 1/11/2012 12:00
B 2/12/2012 08:00 2/12/2012 16:00
そして、そのようなテーブルに対して時間間隔でクエリを実行することがよくあります。
SELECT data
FROM my_table
WHERE start BETWEEN t1 AND t2; -- usually we either use start or end time for every row.
ここで、t1 と t2 は DATE/TIMESTAMP 値 st t1<= t2 です。
これらのクエリは大きなテーブルで実行されるため、上記のようなクエリを実行するためのより良い、つまりより効率的な方法はありますか?
現在、上記の構造を持つテーブルに時間データ列のいずれかにインデックスがあるかどうかはわかりませんが、それらを追加することはほとんど問題になりません。それらは、時間に関連しない他の列にインデックスを持っています。
分析関数 (パーティションなど) を使用すると、これらの種類のクエリを単純に BETWEEN..AND を使用するよりもはるかに効率的にできることを読んだことを覚えています。残念ながら、私はもうリンクを見つけることができず、分析機能についても知りません。ネット上のあちこちでいくつかの短い紹介を読んだだけです。
調査する時間がほとんどないため、私の理論を確認し、私の問題に関連する例を教えていただけないでしょうか。
言うまでもなく、私の問題に対する簡単な回答、コピー&ペーストするもの、私が正しい方向を見ているかどうかを理解するためのヒントを求めているわけではありません.
ティア
編集: @jonearles: 最初のステートメントについては同意しますが、分析関数を使用しても実際により効率的なクエリを提供でき ないかどうかを知りたいです。
後者の場合、はい、PARTITION BY 句を意味しました。分析関数は PARTITION BY 句で使用されることが想定されているため、これはばかげた仕様だと思います。前に言ったように、この件についてあまり詳しく調べていないので、混乱を招いてしまったことをお詫びします。