2012-06-18 51 views
0

我有一个表,如下所示:存储按时间顺序排列的行的有效方法?

CREATE TABLE IF NOT EXISTS grades(_id, timestamp, extra); 

我想创建的“时间戳”的指标,所以我做:

CREATE INDEX idx_timestamp ON grades(timestamp); 

我想选择20个记录在time based off the timestamp then:

SELECT * FROM grades WHERE timestamp > 123 ORDER BY timestamp ASC LIMIT 20; 

那么,有没有更有效的方法来定义列“timestamp”?我只是猜测把它指定为一个索引列是我们所能做的,并且为排序顺序指定“ASC”是一个无操作 - 或者我可以告诉sqlite存储由时间戳预先排序的记录吗?

我基本上是试图实现一个寻呼系统,一次选择20个项目按时间顺序排序的页面。

谢谢

回答

0

这很好。它会使用索引来订购,所以它会提高速度。虽然,取决于你在做什么,你可能会想缓存一些记录。

SELECT * FROM grades WHERE timestamp > 123 ORDER BY timestamp ASC LIMIT 200;

现在,我们可以在同一时间得到200,但现在我们将让JavaScript或服务器处理分页。基本上你会跟踪分页的位置,然后只在需要时再次访问数据库。另外,通过使用更有限的时间戳WHERE子句,它实际上非常快速和高效。比使用LIMIT N,M更好。

如果您执行第二个选项,您将能够缓存该查询,具体取决于它被击中的频率。因此,如果多人持续询问某件事情,数据库将缓存它,并且它已经存在,它会很快恢复。

相关问题