在Android上使用AUTOINCREMENT for SQLite的开销是多少?

问题描述:

在SQLite的文档,它包括以下内容: -在Android上使用AUTOINCREMENT for SQLite的开销是多少?

AUTOINCREMENT关键字强加额外的CPU,内存,磁盘空间,并 磁盘I/O开销,应该如果不严格需要避免。通常不需要 。

由AUTOINCREMENT关键字实施的行为是巧妙地 从默认的行为不同。使用AUTOINCREMENT时,自动选择ROWID的行将保证具有 之前从未在同一个数据库中使用过的ROWID。并且自动生成的ROWID保证单调增加 。这些在某些应用中是重要的属性。 但是,如果您的应用程序不需要这些属性,则应该使用默认行为 ,因为使用AUTOINCREMENT 需要在插入每行时执行额外的工作,因此 会导致INSERT运行速度稍慢。

以上报价均为从SQLite Autoincrement

那么,什么样的影响,可以预期的以及在多大程度上是AUTOINCREMENT慢一点?

我的估计,注意到我不是一个统计学家,是开销比较慢,比如8-12%

我使用结构上相似的和简单具有两个TEXT列,每运行每个表插入,上4台设备重复该5次获得的结果。

表1(Dflt列)仅由两个TEXT列创建(因此使用默认的ROWID)。

表2(AI列)除了两个TEXT列之外还使用_id INTEGER PRIMARY KEY AUTOINCREMENT创建。

表3(无AI列)除了两个TEXT列外还使用_id INTEGER PRIMARY KEY创建。

所以表2使用稍微不同的ROWID选择算法的插入。

使用的四个器件是: -

  • (1)一种Genymotion仿真设备(自定义平板 - 5.1。0 - API 22 - 最高1536x2048 )

  • (2)岩蛇10" 片剂(AT101-1116 )

  • (3)一种HTC 1 M8(HTC_0PKV1 )

  • (4- )甲Lenevo A10-30片剂(联想TB2-X30F )

    我所获得的结果: -

当一切都在仅有1交易(运行

enter image description here

的结果是更有利的即beginTransaction();任何插入,与setTransactionSuccessful();endTransaction();所有插入之后(之前为所有表即整个150000个插入),例如: -

enter image description here

两个表的对比,突出了好处,使用事务可以在性能。