Sql 如何改进受排序限制的批处理查询

Sql 如何改进受排序限制的批处理查询,sql,sqlite,Sql,Sqlite,我使用批处理查询使我的应用程序更具响应性。与一次获取所有内容相比,这是一种改进,但是,当滚动浏览结果时,我的设备在加载下一组结果时有明显的延迟(~500毫秒)。我推断排序导致了延迟(通过删除顺序导致平滑滚动) 然后 告诉我它使用一个临时二叉树作为orderby(尽管有可用的索引) 我可以提高分拣速度吗?从it接缝来看,排序是O(nlogn),无论它使用的是二叉树还是索引 我可以避免对后续请求进行排序吗。即,在限制30偏移量30的结果中,以某种方式重新使用限制30的第一类结果 还有其他策略可以帮

我使用批处理查询使我的应用程序更具响应性。与一次获取所有内容相比,这是一种改进,但是,当滚动浏览结果时,我的设备在加载下一组结果时有明显的延迟(~500毫秒)。我推断排序导致了延迟(通过删除
顺序导致平滑滚动)

然后

告诉我它使用一个临时二叉树作为orderby(尽管有可用的索引)

  • 我可以提高分拣速度吗?从it接缝来看,排序是
    O(nlogn)
    ,无论它使用的是二叉树还是索引

  • 我可以避免对后续请求进行排序吗。即,在
    限制30偏移量30
    的结果中,以某种方式重新使用
    限制30
    的第一类结果

  • 还有其他策略可以帮助吗


您能否向数据中添加一列包含排序顺序的内容?然后,您可以查询当前获取的sortkey>min和 在不限制行的情况下运行查询。一旦你创建了一个读卡器,读前30行,中断,做你的处理,然后继续读你用同一个读卡器留下的地方。这听起来更像是你真正想要的

或者,继续在后台读取数据结构

但是如果您需要排序,那么发出多个DB查询将不会有帮助,并且无法减少需要进行排序的数据集。

@CL。这看起来不错。“不要尝试使用限制和偏移量实现滚动窗口”哈哈,我觉得自己像个白痴:)
SELECT myTable.itemID 
FROM myTable  
ORDER BY myTable.order ASC 
LIMIT 30
LIMIT 30 OFFSET 30
LIMIT 30 OFFSET 60
etc...
SCAN TABLE myTable (~1000000 rows)
USE TEMP B-TREE FOR ORDER BY