在SQLite中,将列指定为INTEGER PRIMARY KEY将使该列成为rowid的别名,这意味着SELECT语句可以非常快地运行,因为它们可以利用存储数据的B树结构。
通过在列上指定CREATE UNIQUE INDEX可以达到相同的性能水平吗?特别是,如果我们在INTEGER列上创建UNIQUE INDEX,则SQLite会将该列作为rowid的别名,并具有相应的性能优势。
我目前的看法是,指定INTEGER PRIMARY KEY至少与CREATE UNIQUE INDEX一样好,并且可能更好。
最佳答案
documentation说:
通过rowid检索或排序记录很快。搜索具有特定rowid的记录,或搜索具有指定范围内的rowid的所有记录的速度大约是通过指定任何其他PRIMARY KEY或索引值进行的类似搜索的两倍。
和:
如果rowid表的主键由单个列组成,并且该列的声明类型为大写和小写形式的“ INTEGER”,则该列将成为rowid的别名。
没有其他方法可以使列成为rowid的别名。
关于sql - 在SQLite中CREATE UNIQUE INDEX或INTEGER PRIMARY KEY的性能更高吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31768572/