0

我使用批处理查询来使我的应用程序更具响应性。这是一次获取所有内容的改进,但是,当滚动结果时,我的设备在加载下一组结果时存在明显的延迟(约 500 毫秒)。我推断排序导致滞后(删除ORDER BY导致平滑滚动的结果)。

SELECT myTable.itemID 
FROM myTable  
ORDER BY myTable.order ASC 
LIMIT 30

然后

LIMIT 30 OFFSET 30
LIMIT 30 OFFSET 60
etc...

告诉我它使用EXPLAIN QUERY PLAN临时二叉树进行排序(尽管有可用的索引)。

SCAN TABLE myTable (~1000000 rows)
USE TEMP B-TREE FOR ORDER BY
  • 我可以提高分拣速度吗?从文档中可以看出,排序O ( N logN )无论是使用二叉树还是索引。

  • 我可以避免对后续请求进行排序吗?即以某种方式重新使用结果中的第一个排序LIMIT 30结果 from LIMIT 30 OFFSET 30

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

4

1 回答 1

0

您可以在数据中添加包含排序顺序的列吗?然后您可以查询当前提取的 sortkey > min 和 < max 的位置,然后对该子集进行排序。否则,您将对每个查询的所有数据进行排序,以确定偏移起点,这永远不会那么快。还有其他各种加载数据的选项......

在不限制行的情况下运行您的查询。一旦你创建了一个阅读器,阅读前 30 行,休息,做你的处理,然后用同一个阅读器从你离开的地方继续。这听起来更像你真正想要的。

或者,继续在后台阅读您的数据结构。

但是,如果您需要排序并且不能减少需要进行排序的数据集,那么发出多个数据库查询将无济于事。

于 2013-06-17T16:14:47.467 回答