我有一个包含三个相关的列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
你正在使用什么数据库系统? –