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

我需要在列表视图中显示 SQLite 结果。

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

SELECT * FROM Table LIMIT 100, 5000

It returns records 5001 to 5100. The problem is that internally SQLite "reads" the first 5000 records and it is not too efficient.

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

51231 次浏览

请注意,您必须始终使用 ORDER BY子句; 否则,顺序是任意的。

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

SELECT *
FROM MyTable
WHERE SomeColumn > LastValue
ORDER BY SomeColumn
LIMIT 100;

(详细解释 on the SQLite wiki。)

当有多个排序列(以及 SQLite 3.15或更高版本)时,可以使用 行值比较行值比较进行以下操作:

SELECT *
FROM MyTable
WHERE (SomeColumn, OtherColumn) > (LastSome, LastOther)
ORDER BY SomeColumn, OtherColumn
LIMIT 100;