我需要在列表视图中显示SQLite结果。当然,我需要分页结果。
第一种选择是使用LIMIT子句。例如:
SELECT * FROM Table LIMIT 100, 5000
它返回记录5001到5100。问题是SQLite在内部“读取”了前5000条记录,效率不是很高。
有大量记录时分页的最佳方法是什么?
我需要在列表视图中显示SQLite结果。当然,我需要分页结果。
第一种选择是使用LIMIT子句。例如:
SELECT * FROM Table LIMIT 100, 5000
它返回记录5001到5100。问题是SQLite在内部“读取”了前5000条记录,效率不是很高。
有大量记录时分页的最佳方法是什么?
Answers:
请注意,您始终必须使用ORDER BY
子句;否则,顺序是任意的。
要进行有效的分页,请保存有序字段的第一个/最后一个显示的值,并在显示下一页时在它们之后继续:
SELECT *
FROM MyTable
WHERE SomeColumn > LastValue
ORDER BY SomeColumn
LIMIT 100;
(这在SQLite Wiki上有更详细的解释。)
当您有多个排序列(以及SQLite 3.15或更高版本)时,可以为此使用行值比较:
SELECT *
FROM MyTable
WHERE (SomeColumn, OtherColumn) > (LastSome, LastOther)
ORDER BY SomeColumn, OtherColumn
LIMIT 100;