根据官方手册:
"AUTOINCREMENT 关键字会施加额外的 CPU、内存、磁盘空间和磁盘 I/O 开销,如果不严格需要,则应避免使用。通常不需要它。
所以最好不要使用它?您是否有任何使用隐式 rowid 与使用自动增量的基准
?按照文档中的建议,最好不要使用 AUTOINCREMENT,除非您需要确保rowid的别名(也称为 id(大于已添加的任何别名。但是,(在正常使用中(这是一个有争议的问题,因为即使没有自动增量,直到您达到9223372036854775807行,则会产生更高的rowid/id。
如果您确实达到了 9223372036854775807 的 id/rowid,那么如果您编码了 AUTOINCREMENT,那就是这样,因为会发生SQLITE_FULL异常。在没有自动增量的情况下,将尝试获取未使用的 id/rowid。
AUTOINCREMENT 将记录最高分配 ID 的行(如果需要,则为表(添加到sqlite_sequence。带和不带自动增量的区别在于,sqlite_sequecence表被引用,而没有自动增量则不被引用。因此,如果删除了具有最高 id 的行 AUTOINCREMENT 从sqlite_sequence表中获取有史以来分配的最高 id(并且用户max(rowid)
中较大的 id(,则没有这样做,因此它使用插入该行的表中的最高 (相当于max(rowid)
(。
在有限的测试中,发现 8-12% 的开销是开销,如在 Android 上使用 AUTOINCREMENT for SQLite 的开销是多少? .
我已经尝试过使用python3和sqlalchemy 1.4进行sqlite3自动增量。
在整数主键 ID 列上启用自动增量之前,单个插入使用大约不到 0.1 秒。启用此功能后,单次插入使用 1.5 秒以上。
性能差距很大。