tickets関連する 3 つの列を含む 1 つのテーブルがあります: id、where 、startおよびare 。finishstartfinishtimestamps
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 です。