【问题标题】:Efficient paging in SQLite with millions of records具有数百万条记录的 SQLite 中的高效分页
【发布时间】:2013-01-06 06:36:36
【问题描述】:

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

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

SELECT * FROM Table LIMIT 100, 5000

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

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

【问题讨论】:

    标签: sqlite


    【解决方案1】:

    请注意,您始终必须使用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;
    

    【讨论】:

    • 在 SomeColumn 中有 101 个相同值的情况会怎样?这似乎更好:blog.ssokolow.com/archives/2009/12/23/…
    • @JacekŁawrynowicz 如果排序列不唯一,则需要按更多列排序。无论如何,如果您有其他答案,请创建一个答案。
    • @CL 如果我想通过连接查询来执行此操作,如何处理多个 AND 条件
    • @YLS 现在可以使用行值了。
    • this comment简单解释了使用这种方式的问题
    猜你喜欢
    • 1970-01-01
    • 2021-04-24
    • 2017-03-15
    • 1970-01-01
    • 2011-02-19
    • 1970-01-01
    • 2015-10-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多