在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 )
我所获得的结果: -
的结果是更有利的即beginTransaction();
任何插入,与setTransactionSuccessful();
和endTransaction();
所有插入之后(之前为所有表即整个150000个插入),例如: -
两个表的对比,突出了好处,使用事务可以在性能。