在数百万条logging中有效地分页SQLite
我需要在列表视图中显示SQLite结果。 当然,我需要分页的结果。
第一个选项是使用LIMIT子句。 例如:
SELECT * FROM Table LIMIT 100, 5000
它返回logging5001到5100.问题是内部SQLite“读取”前5000个logging,并不是太高效。
有很多logging时,寻呼的最佳方法是什么?
请注意,您总是必须使用ORDER BY
子句; 否则,你只是得到一些随机的顺序。
要进行高效分页,请保存有序字段的第一个/最后一个显示值,并在显示下一页时继续:
SELECT * FROM MyTable WHERE SomeColumn > LastValue ORDER BY SomeColumn LIMIT 100;
(这在SQLite wiki上有更详细的解释。)
当你有多个sorting列(和SQLite 3.15或更高版本),你可以使用这个行值比较 :
SELECT * FROM MyTable WHERE (SomeColumn, OtherColumn) > (LastSome, LastOther) ORDER BY SomeColumn, OtherColumn LIMIT 100;