【问题标题】:Efficient way to find lots of "most recent" events in sqlite3在 sqlite3 中查找大量“最新”事件的有效方法
【发布时间】:2012-10-02 21:08:22
【问题描述】:

我有一个包含事件的 sqlite3 数据库。每个事件要么是“开启”,要么是“关闭”某件事的发生,并且包含事件发生的时间以及事件是什么以及一些因事件而异的杂项数据。

我想查询以找到每种类型的最后一个事件。到目前为止,这是我提出的查询:

SELECT * from event where name='event1on' or name='event1off' ORDER BY t DESC LIMIT 1

这可行,但是当我有很多要查找最新事件的事件时,它会很慢。我怀疑这是因为每次 SELECT 都必须对数据库进行全面扫描(几百万行),但我找不到更有效的方法来做到这一点。

【问题讨论】:

    标签: performance select sqlite


    【解决方案1】:

    如果您有 SQLite 3.7.11 或更高版本,您可以使用max 从包含最大值的记录中选择其他字段:

    SELECT *, max(t) FROM event GROUP BY name
    

    要加快查询速度,请尝试在 namet 字段上创建一个索引。

    【讨论】:

    • 我试过CREATE INDEX eventNameTimeIndex on event (name,t),但对查询时间没有影响。
    • 看来,如果没有索引,您建议的查询所花费的时间与我的查询大致相同。我喜欢它,因为它更紧凑。但是,有了索引,我的查询比您提供的查询快了大约 40 倍。
    猜你喜欢
    • 2011-10-08
    • 2015-05-22
    • 2013-02-09
    • 2021-08-19
    • 2011-02-11
    • 2010-09-29
    • 2021-11-11
    • 1970-01-01
    • 2015-11-30
    相关资源
    最近更新 更多