【问题标题】:What is the most efficient way of querying for the most recent entries in SQL?在 SQL 中查询最新条目的最有效方法是什么?
【发布时间】:2015-03-25 00:12:00
【问题描述】:

我有一个 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]

这可能吗?还是必要的?

【问题讨论】:

  • 添加一个Order By timestamp desc 以获取您的事件的时间戳,从最近到最远的过去顺序。如果您的数据按特定顺序构建,则应始终使用 Order By 子句,以确保以有意义的方式排列结果。否则,您的结果将按照数据库在该时间和空间点上给您的任何顺序出现。

标签: sql sqlite


【解决方案1】:

最有效的方法是使用查询:

SELECT *
FROM events
WHERE timestamp > [some time];

(评论:这是您的查询。)

并且在timestamp 上有一个索引:

create index idx_events_timestamp on events(timestamp);

【讨论】:

    【解决方案2】:

    同意@GordonLinoff 的回答。根据我的经验,必须有非常大量的数据才能让它变慢 - 数据库经过优化,可以在列被索引时很好地处理这个问题。

    这里的问题是 SQL 不保证返回行的顺序,除非您使用 ORDER BY,这会慢。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-19
      • 1970-01-01
      • 2012-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多