SQLITE:关于使用 AUTOINCREMENT 的最佳实践

SQLITE: Best practices about using AUTOINCREMENT

根据official manual

"The AUTOINCREMENT keyword imposes extra CPU, memory, disk space, and disk I/O overhead and should be avoided if not strictly needed. It is usually not needed."

所以还是不要用比较好?您是否有使用隐式 rowid 与使用 AUTOINCREMENT 的基准?

按照文档中的建议,最好不要使用 AUTOINCREMENT,除非您需要确保 rowid(又名 id)的别名大于任何具有已添加。但是,(在正常使用中)它本身是一个有争议的问题,即使没有 AUTOINCREMENT,直到你达到 9223372036854775807 行然后更高的 rowid/id 会产生。

如果您确实达到了 9223372036854775807 的 id/rowid,那么如果您对 AUTOINCREMENT 进行了编码,那就是这样,因为会发生 SQLITE_FULL 异常。在没有 AUTOINCREMENT 的情况下,将尝试获取未使用的 id/rowid.

A​​UTOINCREMENT 添加一行(table 如果需要)到 sqlite_sequence 记录最高分配的 id。使用和不使用 AUTOINCREMENT 的区别在于 sqlite_sequecence table 被引用,而没有 AUTOINCREMENT 则不是。因此,如果删除了具有最高 ID 的行,AUTOINCREMENT 会从 sqlite_sequence table(以及用户中较大的那个或 max(rowid))获得有史以来分配的最高 ID,而没有则不会它使用插入行的 table 中的最高值(相当于 max(rowid))。

根据通过有限的测试发现 8-12% 的开销是在 Android 上对 SQLite 使用 AUTOINCREMENT 的开销是多少? .

我已经尝试使用 python3 和 sqlalchemy 1.4 的 sqlite3 autoincrement。

在 Integer Primary Key ID 列上启用自动增量之前,单次插入使用大约不到 0.1 秒。启用此功能后,单次插入使用超过1.5秒。

性能差距大