存储按时间顺序排列的有效方法?

时间:2012-06-18 00:16:51

标签: sqlite

我有一张这样的桌子:

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

我想在“timestamp”上创建索引,所以我正在做:

CREATE INDEX idx_timestamp ON grades(timestamp); 

我想根据时间戳一次选择20条记录:

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

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

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

由于

1 个答案:

答案 0 :(得分:0)

这很好。它将使用索引进行排序,因此它会提高速度。但是,根据您的操作,您可能希望缓存一些记录。

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

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

更好

如果您执行第二个选项,您也可以缓存该查询,具体取决于它被击中的频率。所以,如果有多个人一直在查询某些东西,那么数据库会对它进行缓存,并且它会很快回来,因为它已经存在了。