什么是Android上使用AUTOINCREMENT SQLite的的开销?什么是Android上使

2019-05-12 13:49发布

在SQLite的文档,它包括以下内容: -

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

由AUTOINCREMENT关键字实施的行为是默认行为微妙的不同。 随着AUTOINCREMENT,与自动选择的ROWID列都保证有一个以前从未在同一个表在同一数据库中使用的ROWID。 而自动生成的ROWID保证是单调递增。 这些是在某些应用中重要的属性。 但是如果你的应用程序不需要这些特性,你应该留在默认行为,因为使用AUTOINCREMENT需要额外的工作,因为每个行插入地进行并因此导致的INSERT运行慢一点。

以上报价均为从SQLite的自动增量

那么什么样的影响,是可以预料的和是多少AUTOINCREMENT慢一点?

Answer 1:

我的估计,并指出,我不是一个统计学家,是开销是一样的东西要慢8-12%。

我得到使用3-结构上相似的和简单的的结果有两个文本列,每每个表运行万个插入,上4台设备重复该5次。

表1(DFLT柱)与刚刚两个文本列(从而利用默认ROWID)创建的。

表2(AI柱)使用创建_id INTEGER PRIMARY KEY AUTOINCREMENT除了两个文本列。

表3(无AI柱)使用创建_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交易(即运行的结果是更有利beginTransaction();任何插入之前,用setTransactionSuccessful();endTransaction();所有插入(所有表,即整个150000个插入)后,例如: -

两个表的对比,强调了使用事务可以在性能的优势。



文章来源: What are the overheads of using AUTOINCREMENT for SQLite on Android?