在SQLite的文档,它包括以下内容: -
AUTOINCREMENT关键字强加额外的CPU,内存,磁盘空间和磁盘I / O开销,如果不严格需要应该避免。 它通常是没有必要的。
和
由AUTOINCREMENT关键字实施的行为是默认行为微妙的不同。 随着AUTOINCREMENT,与自动选择的ROWID列都保证有一个以前从未在同一个表在同一数据库中使用的ROWID。 而自动生成的ROWID保证是单调递增。 这些是在某些应用中重要的属性。 但是如果你的应用程序不需要这些特性,你应该留在默认行为,因为使用AUTOINCREMENT需要额外的工作,因为每个行插入地进行并因此导致的INSERT运行慢一点。
以上报价均为从SQLite的自动增量
那么什么样的影响,是可以预料的和是多少AUTOINCREMENT慢一点?
我的估计,并指出,我不是一个统计学家,是开销是一样的东西要慢8-12%。
我得到使用3-结构上相似的和简单的表的结果有两个文本列,每每个表运行万个插入,上4台设备重复该5次。
表1(DFLT柱)与刚刚两个文本列(从而利用默认ROWID)创建的。
表2(AI柱)使用创建_id INTEGER PRIMARY KEY AUTOINCREMENT
除了两个文本列。
表3(无AI柱)使用创建_id INTEGER PRIMARY KEY
除了两个文本列。
因此, 表2使用为嵌入式略有不同的ROWID选择算法 。
使用以下四种设备是: -
当一切都在短短的1交易(即运行的结果是更有利beginTransaction();
任何插入之前,用setTransactionSuccessful();
和endTransaction();
所有插入(所有表,即整个150000个插入)后,例如: -
两个表的对比,强调了使用事务可以在性能的优势。