在SQLite中浏览结果的最佳方式

在SQLite中浏览结果的最佳方式,sql,database,sqlite,database-view,Sql,Database,Sqlite,Database View,假设我在SQLite中有以下查询: SELECT * FROM mytable ORDER BY product ASC 我希望最终用户能够以可滚动的方式查看数据,例如,像Excel中当前可查看的数据一样。如果用户向下滚动100个结果,而不是执行以下操作: SELECT * FROM mytable ORDER BY product ASC LIMIT 50 OFFSET 100 我希望确保返回给他们的结果在25ms左右,而不是让他们在每次移出可视范围时等待执行查询所需的时间 最好的方法是什

假设我在SQLite中有以下查询:

SELECT * FROM mytable ORDER BY product ASC
我希望最终用户能够以可滚动的方式查看数据,例如,像Excel中当前可查看的数据一样。如果用户向下滚动100个结果,而不是执行以下操作:

SELECT * FROM mytable ORDER BY product ASC LIMIT 50 OFFSET 100
我希望确保返回给他们的结果在25ms左右,而不是让他们在每次移出可视范围时等待执行查询所需的时间

最好的方法是什么?在伪代码中,我按照以下思路思考:

-- 1st time query is run
SELECT * FROM mytable ORDER BY product ASC LIMIT 50 -- in main thread
INSERT INTO queryset_cache -- in background thread
  SELECT rowid, * FROM mytable ORDER BY product ASC 

-- 2nd time query is run, offset 84,500 (user scrolls down to that position
SELECT * FROM queryset_cache ORDER BY rowid LIMIT 50 OFFSET 84500

这是实现我所要做的事情的最好方式吗?或者在SQLite中是否有一种标准化的方法来执行上述操作?如果是这样,最好的方法是什么?

使用偏移量通常不是一个好主意,因为数据库在返回结果之前必须跳过这么多行

一个好的解决方案是为product列建立索引并选择。。。从…起其中_开始_和_结束之间的产品_

并不断更改开始和结束,以便数据库返回所需的页面

如果这很困难,比如说,您有许多行具有相同的产品,您可以定义一个组合键产品,xxx更好地选择行并使用它来选择页面


如果所有其他操作都失败,并且您决定创建一个新的分页表,请使用该键添加一个自动增量id列和分页。

谢谢您的建议。我喜欢通过添加自动递增的id来概括它,而不必担心创建复合索引。在执行插入时,我如何自动创建自动增量id字段,例如:创建表queryset_缓存作为SELECT*FROM mytable ORDER BY product?结果表明,sqlite对每个表都有一个rowid属性。您可以尝试使用它,即不需要添加其他列,您可以使用CREATE。。是的,确实如此,但在进行插入时,这通常是“无序的”。这实际上是我第一次尝试使用。无论如何,我已经接受了你的答案,并在这里提出了一个新问题:不确定为什么它会出现问题,但你总是可以手动创建带有自动递增列的表,然后插入到新的表中选择。。。我在这里错了。它可以这样做,使这更简单!