在 SQLite 文档中,它包括以下内容:-
AUTOINCRMENT 关键字会施加额外的 CPU、内存、磁盘空间和
磁盘 I/O 开销,如果不是严格需要的话应该避免。这是
通常不需要。
and
AUTOINCRMENT 关键字实现的行为巧妙地
与默认行为不同。使用自动增量,行
自动选择的 ROWID 保证具有以下 ROWID:
以前从未被同一数据库中的同一表使用过。还有
自动生成的ROWID保证是单调的
增加。这些是某些应用中的重要属性。
但如果您的应用程序不需要这些属性,您应该
自从使用 AUTOINCREMENT 以来,可能会保持默认行为
插入每一行时需要完成额外的工作,因此
导致 INSERT 运行速度稍慢。
以上引述均来自SQLite自动增量 https://sqlite.org/autoinc.html
那么,预计会产生什么样的影响,自动增量会慢多少呢?
我的估计,注意到我不是统计学家,开销是这样的8-12% slower.
我使用得到的结果3结构相似且简单tables有两个 TEXT 列,正在运行10,000每个表插入,在 4 台设备上重复此操作 5 次。
表1(Dflt列)仅使用两个 TEXT 列创建(因此利用默认的 ROWID)。
表2(AI栏)是使用创建的_id INTEGER PRIMARY KEY AUTOINCREMENT
除了两个 TEXT 列之外。
表3(无AI栏)是使用创建的_id INTEGER PRIMARY KEY
除了两个 TEXT 列之外。
So Table 2使用ROWID选择算法略有不同用于插入件。
使用的四种设备是:-
(1) Genymotion 模拟设备(自定义平板电脑 - 5.1.0 - API 22 - 1536x2048
)
(2) Onix 10" 平板电脑 (AT101-1116
)
(3) 一台 HTC 1 M8 (HTC_0PKV1
)
-
(4)一台联想A10-30平板电脑(联想TB2-X30F
)
我得到的结果是:-
当所有内容仅在 1 个事务中运行时(即beginTransaction();
在任何插入之前,用setTransactionSuccessful();
and endTransaction();
在所有插入之后(对于所有表,即全部 150,000 次插入),例如:-
比较两个表,突出显示使用事务对性能的好处。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)