SQLite中具有数百万条记录的高效分页

时间:2013-01-22 21:44:27

标签: sqlite

我需要在列表视图中显示SQLite结果。当然,我需要分页结果。

第一个选项是使用LIMIT子句。例如:

SELECT * FROM Table LIMIT 100, 5000

它返回记录5001到5100.问题是内部SQLite“读取”前5000条记录并且效率不高。

当有大量记录时,分页的最佳方法是什么?

1 个答案:

答案 0 :(得分:108)

请注意,您必须始终使用ORDER BY条款;否则,订单是任意的。

要进行有效的分页,请保存已排序字段的第一个/最后一个显示值,并在显示下一页时继续显示它们:

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;