已关闭,此问题需要更focused。它目前不接受回答。
**想改善这个问题吗?**更新问题,使其只关注editing this post的一个问题。
17天前关闭
Improve this question
1.是否应使用“WITHOUT ROWID”创建具有INTEGER PRIMARY KEY的新表?
文件似乎表明:
在优雅的系统中,即使没有WITHOUT ROWID关键字,所有表的行为也将与WITHOUT ROWID表相同。
https://www.sqlite.org/withoutrowid.html
此外,在ROWID别名INTEGER PRIMARY KEY vs rowid in SQLite上也存在空间开销
1.这篇文章似乎表明WITHOUT ROWID
是旧数据库的兼容性。
一般来说,你不应该在任何新项目中使用WITHOUT ROWID
表。引入此选项是为了支持与旧数据库的向后兼容性。
https://chumaky.team/blog/sqlite-primary-key-explained
1条答案
按热度按时间htrmnn0y1#
实际上,WITHOUT ROWID的唯一好处是如果主键不是整数类型。因此,rowid列/索引不存在。但是,如果你有....整数主键.如果没有ROWID,那么你就有效地使用了rowid列/索引,但有细微的区别。
Really WITHOUT ROWID表用于具有非整数或复合类型主键的表。在这种情况下,rowid列和索引可能没有什么好处,只会浪费空间,并消耗额外的资源来管理rowid及其索引。
我认为以下是官方文件中最相关的观点/声明之一:
因此,在某些情况下,WITHOUT ROWID表可以使用大约一半的磁盘空间,并且可以以几乎两倍的速度运行。当然,在现实世界的模式中,通常会有二级索引和/或UNIQUE约束,情况会更加复杂。但即使这样,在具有非整数或复合主键的表上使用WITHOUT ROWID通常也会有空间和性能上的优势。