【发布时间】: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