0

我有一张这样的桌子:

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;

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

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

谢谢

4

1 回答 1

0

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

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

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

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

于 2012-06-18T00:25:31.513 回答