sql - 在SQLite中CREATE UNIQUE INDEX或INTEGER PRIMARY KEY的性能更高吗?

标签 sql sqlite

在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/

相关文章:

php - 从 DB html/css 显示的 500 个结果丢失格式

database - 无法使用 Navicat 从 sqlite 数据库中删除记录

javascript - 导出WebSQL数据

java - 在文本字段中验证 PIN 码

mysql - 如何将 Select 和 Join select 连接到单个查询中

python - 我如何在 sqlite3 中搜索字符串的一部分?

python - 如何使用索引将 Pandas 数据框写入 sqlite

python - SQLAlchemy 中的计数关系

php - 从数据库接收变量的最佳方式

sql - IPv4 地址的 PostgreSQL 字段数据类型