【问题标题】:SQLite: Should I use Integer primary key or Integer when storing data from API?SQLite:从 API 存储数据时应该使用整数主键还是整数?
【发布时间】:2018-10-18 00:59:05
【问题描述】:

我继承了一个 iOS 项目,该项目使用数据类型 Integer primary key 在列中存储记录 ID。这很好用,但是,我不确定为什么它不只是使用常规的Integer。 iOS 应用程序从 API 中获取记录并将其存储在本地 SQLite 数据库中。 API 中的这些记录均已具有唯一 ID(例如 id:100101394)。

在这种情况下使用整数主键而不是常规整数有什么理由或优势?

编辑:如果有意义的话,应用程序会使用记录的唯一 ID 作为 Integer 主键,但我不知道为什么我不能只使用常规整数。

编辑1:大家,我知道我可以使用主键来访问记录。我想了解的是,我是否有理由将它用于可以存储记录 ID 的常规 Integer。API 返回的每个记录 ID 都是唯一的。

【问题讨论】:

  • 一个原因?较小的表(因为它是行的 real PK 的 rowid 值的别名,它不会像普通列那样占用额外的空间),并且通过 id 查找更快(即使您有一个索引非 PK INTEGER 列)。
  • 确保我理解正确。这两个优点是不会使表变大,并且查找主键比查找整数更快。抱歉,但我想确定一下,因为我对这一切有点陌生。
  • 不是单个 INTEGER 列的 PK 只是 sqlite 中的普通唯一索引。阅读其中一个答案中关于 rowids 的链接,以及关于 sqlite 如何使用索引来帮助理解其工作原理的this description。基本上,如果您通过 rowid/integer 主键查找一行,则可以直接找到该行,而无需像其他索引列所需的任何辅助查找。 (当然,查找未索引的列需要对每一行进行全表扫描)。
  • 好的,我明白了。但是,我有一个担心。因此,在我的示例中,如果 API 返回具有唯一 id 的记录,例如 100。然后,我将该 id (100) 存储为主键。如果我按主键查找,还是会直接找到还是会做全表扫描?如果我让你感到沮丧,我很抱歉,我只需要确定一下,因为我之前假设了一些事情并在过去给我带来了很多问题。
  • 在我的其他评论中阅读该链接。

标签: ios sqlite integer primary-key


【解决方案1】:

Integer Primary Key 是键入的,你只能输入一个整数。它还将保证在输入 null 时插入一个整数。我相信它也可以作为 RowID 的别名,如果该表存在的话。

这里是相关文档的链接。

https://sqlite.org/lang_createtable.html#rowid

【讨论】:

    【解决方案2】:

    我相信当您希望通过该标识符查找记录时,您会使用密钥。我希望在存储项目时会产生额外的开销,但是如果您想通过“整数主键”ID 访问记录,则可能会节省大量时间和系统开销。

    【讨论】:

      猜你喜欢
      • 2011-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-26
      相关资源
      最近更新 更多