我有一个SQL风格的数据库,带有一个用于记录事件的简单表。每个事件都有一个时间戳,并且只从单个线程更新(因此我们可以相信表中的条目将始终按时间顺序)。该表可能有数月的数据。如果我想查询最近的条目,说最后一天的价值,最好的方法是什么?
我可以这样做:
SELECT * FROM events WHERE timestamp > [some time];
但是这必须检查数据库中的每个事件。我在伪代码中实际想做的是:
get the rows at the end of the table back as far as where timestamp is greater than [some time]
这可能吗?还是必要的?
答案 0 :(得分:3)
最有效的方法是使用查询:
SELECT *
FROM events
WHERE timestamp > [some time];
(评论:这是您的查询。)
要在timestamp
上设置索引:
create index idx_events_timestamp on events(timestamp);
答案 1 :(得分:1)
同意@GordonLinoff的回答。根据我的经验,必须有非常大量的数据才能变慢 - 数据库经过优化,可以在列编制索引时很好地处理这些数据。
这里的事情是SQL不保证返回行的顺序,除非你使用{{1>},这将远更慢。