我有一张这样的桌子:
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个项目的页面。
由于
答案 0 :(得分:0)
这很好。它将使用索引进行排序,因此它会提高速度。但是,根据您的操作,您可能希望缓存一些记录。
SELECT * FROM grades WHERE timestamp > 123 ORDER BY timestamp ASC LIMIT 200;
我们现在可以一次获得200,但现在我们将让javascript或服务器处理分页。基本上,您将跟踪分页的位置,然后仅在需要时再次访问数据库。此外,通过对时间戳使用更有限的WHERE子句,它实际上非常快速和有效。比使用LIMIT N,M。
更好如果您执行第二个选项,您也可以缓存该查询,具体取决于它被击中的频率。所以,如果有多个人一直在查询某些东西,那么数据库会对它进行缓存,并且它会很快回来,因为它已经存在了。