我需要在列表视图中显示SQLite结果。当然,我需要分页结果。SQLite中有效的分页,数百万条记录
第一个选项是使用LIMIT子句。例如:
SELECT * FROM Table LIMIT 100, 5000
它返回记录5001到5100.问题是内部SQLite“读取”前5000个记录,并且效率不高。
当有很多记录时,寻呼的最佳方法是什么?
我需要在列表视图中显示SQLite结果。当然,我需要分页结果。SQLite中有效的分页,数百万条记录
第一个选项是使用LIMIT子句。例如:
SELECT * FROM Table LIMIT 100, 5000
它返回记录5001到5100.问题是内部SQLite“读取”前5000个记录,并且效率不高。
当有很多记录时,寻呼的最佳方法是什么?
请注意,您始终必须使用ORDER BY
条款;否则,你只能得到一些随机顺序。
要做到高效分页,保存第一/最后显示有序场(S)的值,而只是在他们以后继续显示下一个页面时:
SELECT *
FROM MyTable
WHERE SomeColumn > LastValue
ORDER BY SomeColumn
LIMIT 100;
(这与更详细on the SQLite wiki解释。)
当你有多个排序列(和SQLite 3.15或更高版本),你可以使用这个row value comparison:
SELECT *
FROM MyTable
WHERE (SomeColumn, OtherColumn) > (LastSome, LastOther)
ORDER BY SomeColumn, OtherColumn
LIMIT 100;
好戏,不知道这个。并感谢您的链接,非常翔实! –
如何处理SomeColumn中101个相同的值?这似乎更好:http://blog.ssokolow.com/archives/2009/12/23/sql-pagination-without-offset/ –
@JacekŁawrynowicz如果排序列不是唯一的,则需要按更多列进行排序。无论如何,如果您有其他答案,请创建答案。 –
男性额外给予好评限制A,B的缺点! :) –