我有一個包含三個相關的列tickets
一個表:id
,start
和finish
其中start
和finish
是timestamps
。quering的時候,SQL性能間隔
我有第二張表(intervals
)只有一個相關的列是time point
。 time_point
也是timestamp
。 time_point
總是每15分鐘一班。這是第二張表的內容是:
8:00
8:15
8:30
...
第一張表(票)有4百萬記錄。第二個只有96個記錄(24 * 4)。
我必須選擇多少張門票在任何time_point
我寫了下面的查詢是開放的:(簡體版)
select *
from interval, ticket
where (finish is null or finish > time_point)
and start < time_point
其作品,但實在是太慢了。問題是兩個表之間沒有真正的連接,我認爲每行都會執行全表掃描。
我該如何在這裏獲得更好的表現?
謝謝!
編輯:這是一個Oracle數據庫。加快這
我懷疑,這個查詢在各種情況下工作。 'start
如果你真的需要簡單的(可計算的)時間間隔,則應該將「完成」截斷到第一個早期的15分鐘標記。如果您需要更通用的方法,我會嘗試使用區間表來說明區間的開始和結束,並加入'ticket.finish> = interval.start和ticket.finish
你正在使用什麼數據庫系統? –