【问题标题】:Indexes in SQLite and ordering of rows based on PKSQLite 中的索引和基于 PK 的行排序
【发布时间】:2016-12-01 03:28:43
【问题描述】:

SQLite 中的 PK 是否保证数据的顺序?
AFAIK 索引实现按 PK 顺序存储数据。
这适用于 SQLite 吗?即使是复合PK?

【问题讨论】:

    标签: android database sqlite indexing


    【解决方案1】:

    documentation 说:

    如果返回多行的 SELECT 语句没有 ORDER BY 子句,则返回行的顺序是不确定的。

    主键或任何其他索引的存在不会改变这一点;无法保证该索引实际用于查询。

    如果要对查询的输出进行排序,则必须使用 ORDER BY。 (如果可以使用索引轻松实现排序,那么这将不会比没有 ORDER BY 子句的相同查询效率低。)

    【讨论】:

    • 现在我很困惑。他们在这里有同样的东西:sqlite.org/queryplanner.html(检查按 Rowid 排序)
    • 我假设Rowid是自增PK?
    • 那个页面说的完全一样; “不会进行排序”意味着数据库不会执行显式排序步骤。以rowid 顺序读取数据意味着结果已经正确排序。
    • 是的,但这是因为插入顺序保持对吗?
    • 如果您实际使用的是自动递增 ID,则插入顺序为 rowid 顺序。
    【解决方案2】:

    你想知道 SQLite 中索引的底层实现以及 SQLite 是如何在磁盘上存储数据的吗?或许可以在File Format For SQLite DatabasesHere 用中文帮助你。

    【讨论】:

      猜你喜欢
      • 2019-12-08
      • 1970-01-01
      • 2022-08-17
      • 2017-04-14
      • 2011-08-03
      • 1970-01-01
      • 1970-01-01
      • 2018-07-07
      相关资源
      最近更新 更多