tickets
関連する 3 つの列を含む 1 つのテーブルがあります: id
、where 、start
およびare 。finish
start
finish
timestamps
intervals
関連する列が 1 つだけの 2 番目のテーブル ( ) がありtime point
ます。time_point
もtimestamp
です。time_point
常に 15 分ごとです。この 2 番目のテーブルの内容は次のとおりです。
8:00
8:15
8:30
...
最初のテーブル (チケット) には 400 万件のレコードがあります。2 番目には 96 レコードしかありません (24 * 4)。
開いているチケットの数を選択する必要がありますtime_point
次のクエリを書きました: (簡易版)
select *
from interval, ticket
where (finish is null or finish > time_point)
and start < time_point
これは機能しますが、遅すぎます。問題は、両方のテーブル間に実際の結合がなく、すべての行に対して完全なテーブル スキャンが実行されることです。
ここでパフォーマンスを向上させるにはどうすればよいですか?
ありがとう!
編集: これは Oracle DB です。