我使用批量查询使我的应用程序更具响应性。这是对一次取出所有内容的改进,但是,当滚动结果时,我的设备(~500ms)在加载下一组结果时会有明显的延迟。我推断排序导致延迟(删除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 )
的{{3}}接缝开始,无论它是使用二叉树还是索引。
我可以避免对后续请求进行排序。即以某种方式重新使用LIMIT 30
结果中LIMIT 30 OFFSET 30
的第一种排序结果?
是否有其他策略可以提供帮助?
答案 0 :(得分:0)
您可以在包含排序顺序的数据中添加列吗?然后你可以查询sortkey> min和<当前提取的最大值,然后对该子集进行排序。否则,您将对每个查询的所有数据进行排序,以确定偏移起点,永远不会那么快。加载数据有各种其他选项...
运行查询而不限制行。一旦你创建了一个阅读器,读取前30行,中断,进行处理,然后从同一个阅读器上取下你离开的地方。这听起来更像你真正想要的。
或者,继续在后台阅读您的数据结构。
但是,如果您需要排序而不能以其他方式减少需要进行排序的数据集,则发出多个数据库查询将无济于事。