2013-12-18 56 views
2

我可以使用ROWID代替SQLite表中的时间戳吗?SQLite:使用ROWID代替时间戳

我需要得到50个SQLite表中的最新项目,我正在考虑使用一个单独的时间戳字段,但后来我想到一个更大的ROWID意味着一个新的项目,并且ROWID已经存在,不需要改变模式。

回答

3

那么,as it says here(与我的强调):

为ROWID表中的数据被存储为包含用于每个表行 一个条目B树结构,采用ROWID值作为密钥。这 意味着检索或排序记录rowid是快速。搜索 以获得具有特定rowid的记录,或者在指定范围内具有rowid 的所有记录大约是的两倍作为类似搜索 通过指定任何其他PRIMARY KEY或索引值。

然而,它也表示:

ROWID值可以使用以相同的方式 UPDATE语句的任何其他列值可以被修改,或者使用中的一个内置的 别名( “rowid”,“oid”或“rowid”)或通过使用由 创建的别名整数主键。

它肯定会更快,但它有点伤害我对“开放”设计的感觉,因为你依赖于实现的功能而不是特定的功能。

话虽如此,相同的链接也这样说:

有一个例外注意以下,如果一个rowid表有一个由一列和声明的类型的列 的主键 是大写和小写混合的“INTEGER”,那么列 将成为rowid的别名。这样的列通常被称为 作为“整数主键”。如果声明的类型名称完全是“INTEGER”,则PRIMARY KEY列仅成为 整数主键。 “INT”或“BIGINT”或“SHORT INTEGER”或 “UNSIGNED INTEGER”等其他整数类型名称会导致主键列的行为与具有整数亲和性和唯一索引的 普通表列一样,而不是 别名为rowid。

这一点我想给你完美的答案:

定义你的桌子上的INTEGER主键,使用该选择。您将获得使用ROWID的速度(因为如上所述,它只是一个别名),您将在架构中看到您正在做的事情。