我有一个这样的表:
CREATE TABLE IF NOT EXISTS grades(_id, timestamp, extra);我想在“时间戳”上创建一个索引,所以我正在做:
CREATE INDEX idx_timestamp ON grades(timestamp); 我想根据时间戳一次选择20条记录,然后:
SELECT * FROM grades WHERE timestamp > 123 ORDER BY timestamp ASC LIMIT 20;那么,有没有更有效的方式来定义"timestamp“列呢?我只是猜测,将其指定为索引列是我们所能做的,而为排序顺序指定"ASC“是没有意义的--或者我可以让sqlite存储按时间戳预先排序的记录吗?
我基本上是在尝试实现一个分页系统,每次选择一个包含20个项目的按时间顺序排列的页面。
谢谢
发布于 2012-06-18 08:25:32
这很好。它将使用索引进行排序,因此它将提高速度。不过,根据您正在执行的操作,您可能需要缓存一些记录。
SELECT * FROM grades WHERE timestamp > 123 ORDER BY timestamp ASC LIMIT 200;
我们现在可以一次获得200个,但现在我们将让javascript或服务器来处理分页。基本上,您将跟踪分页的位置,然后仅当需要再次访问数据库时才会进行分页。此外,通过对时间戳使用更有限的WHERE子句,它实际上相当快和有效。比使用限制N,M更好。
如果使用第二种方法,则还可以缓存该查询,具体取决于该查询被命中的频率。所以,如果多个人一直在查询某个东西,数据库会缓存它,它会很快返回,因为它已经在那里了。
https://stackoverflow.com/questions/11075803
复制相似问题